Python数据挖掘实战(微课版)
上QQ阅读APP看书,第一时间看更新

2.1.1 Ndarray的创建

在NumPy中,最核心的数据结构是多维数组,即Ndarray。Ndarray是一个快速、灵活的数据容器,该容器与Python内置的列表(List)和元组(Tuple)有显著不同:列表和元组中存储的数据可以为不同类型,但在Ndarray中,所有元素的数据类型必须相同。

创建Ndarray常用的函数有array()、arange()、linspace()、zeros()、ones()、zeros_like()、Ones_like(),以及各种随机生成函数。

1.array()函数

使用NumPy自带的array()函数,可以将Python的列表、元组或者其他序列类型数据转化为Ndarray。代码2-1中展示了将一个有5个整数元素的Python列表转化为Ndarray的过程。

代码2-1 使用array()函数生成Ndarray


import numpy as np
a = np.array([1,2,3,4,5], dtype = np.int64)
print(a)

上述代码的输出结果为


[1 2 3 4 5]

代码2-1中,array()函数在创建数组时,其参数有:①Python列表[1,2,3,4,5];②数组的dtype属性。第一个参数用于设置所生成数组的具体数值,而参数dtype=np.int64是设置所生成数组的数据类型为int64(有符号64位整型数据)。

2.arange()函数

在NumPy中,arange()函数用于创建一个等差数组,arange()方法的完整函数形式:


arange([start,] stop [,step], dtype=None)

arange()函数可以在区间[start, stop)上以start为起点,以step为步长构建一个等差数组。其中,start是可选参数,代表数组的起始值,默认值为0。stop是截止值,所生成的数组中并不包含该值。step是可选参数,设置的是步长,默认值为1。代码2-2展示了使用arange()函数生成数组的过程。

代码2-2 使用arange()函数生成Ndarray


import numpy as np
a = np.arange(5)                #只给定stop参数值
print("数组对象a:\n", a)
b = np.arange(2, 5.0)   #给定start和stop参数值,生成一个浮点型数组
print("数组对象b:\n", b)
c = np.arange(2, 6, 2, dtype = np.int32)  #给定start、stop、step和dtype参数值
print("数组对象c:\n", c)

上述代码的输出结果为


数组对象a:
  [0 1 2 3 4]
数组对象b:
  [2. 3. 4.]
数组对象c:
  [2 4]

代码2-2中,对象b的stop参数设置为浮点型的5.0,NumPy推断所生成的数组为浮点型。对象c设置起始值、截止值和步长分别为2、6和2,获得了一个在区间[2,6)中以2为步长的等差数组,即[2 4]。

3.linspace()函数

linspace()函数也用于创建一个等差数组,其完整函数形式为


linspace(start, stop, num=50, endpoint=True, dtype=None)

该函数可以将区间[start, stop]等分为具有num个元素的等差数组。其中,endpoint参数用于控制所生成的数组是否包含stop。代码2-3展示了使用linspace()函数创建Ndarray的方法。

代码2-3 使用linspace()函数创建Ndarray


a = np.linspace(0, 3, 4, endpoint = True)  #数组包含截止值3
print("数组对象a:\n", a)

上述代码的输出结果为


数组对象a:
 [0. 1. 2. 3.]

代码2-3中,使用linspace()方法在区间[0,3]上生成了一个具有4个元素的等差浮点型数组。由于endpoint参数设置为True,所生成的数组包含截止值3.0。

4.zeros()、ones()、zeros_like()、ones_like()函数

这些函数可以用于生成一个指定形状,且初始值全为0或者1的数组。不同的是,在指定形状时,zeros()和ones()函数接收一个元组作为所生成数组的形状,而zeros_like()和ones_like()函数接收一个现有Ndarray为参数,生成与给定数组的形状相同的全0或者全1数组。

•zeros():生成全0数组,参数为一个指示数组形状的元组。

•ones():生成全1数组,参数为一个指示数组形状的元组。

•zeros_like():生成全0数组,参数为一个现有数组。

•ones_like():生成全1数组,参数为一个现有数组。

代码2-4中展示了使用zeros()和zeros_likes()函数生成全0数组的典型方式。

代码2-4 使用zeros()和zeros_like()函数生成全0数组


a = np.zeros((2, 3), dtype = np.int32)   #生成2×3形状的全0数组
print("数组对象a:\n", a)
a = np.array([1,2,3,4])
b = np.zeros_like(b)     #生成与数组a形状相同、数据类型也相同的全0数组
print("数组对象b:\n", b)

上述代码的输出结果为


数组对象a:
 [[0 0 0]
  [0 0 0]]
数组对象b:
 [0 0 0 0]

代码2-4中,数组对象a是一个2×3形状的全0数组,数据类型为浮点型,其形状由元组(2,3)给定。数组对象b则是一个与现有数组a形状、数据类型相同的全0数组。另外,ones()函数和ones_like()函数的使用方法与它们类似,此处不再赘述。

5.随机生成函数

NumPy的random模块提供了多种随机生成函数,用于生成指定形状且符合特定分布的随机Ndarray,常用的随机生成函数如下。

• NumPy.random.rand(d0,d1,…):生成一个值在区间[0,1)上均匀分布的随机数组。数组的形状由d0、d1等参数给定。

• NumPy.random.randn(d0,d1,…):生成一个符合标准正态分布的随机数组,数组的形状由d0、d1等参数给定。

•NumPy.random.randint(low, high=None, size=None):生成一个在区间[low,high)上均匀分布,形状为size的整数数组(注意,生成的数组中不包含high)。如果参数high=None,则在区间[0,low)上生成随机整数数组。

代码2-5中展示了使用随机生成函数获得Ndarray的过程。

代码2-5 使用随机生成函数获得指定形状的Ndarray


import numpy as np
a = np.random.rand(4)           #生成有4个元素的一维随机数组
print("数组对象a:\n", a)
b = np.random.randn(2, 3)       #生成形状为2×3,符合正态分布的随机数组
print("数组对象b:\n", b)
c = np.random.randint(1, 3, size = (2, 3))
#生成形状为2×3,符合均匀分布的随机整数数组,取值区间为[1,3)
print("数组对象c:\n", c)

上述代码的输出结果为


数组对象a:
 [0.36745442 0.60517773 0.17980316 0.16890639]
数组对象b:
 [[ 0.68690373 -0.09365227 -1.16567108]
  [-1.14932686 -0.63358122 -1.24105667]]
数组对象c:
 [[2 1 1]
  [2 2 1]]