创建一维数组与多维数组并查看数组属性。如代码 41所示。
In[1]: | import numpy as np #导入NumPy库 arr1 = np.array([1, 2, 3, 4]) #创建一维数组 print('创建的数组为:',arr1) |
Out[1]: | 创建的数组为: [1 2 3 4] |
In[2]: | arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]]) #创建二维数组 print('创建的数组为:\n',arr2) |
Out[2]: | 创建的数组为: [[ 1 2 3 4] [ 4 5 6 7] [ 7 8 9 10]] |
In[3]: | print('数组维度为:',arr2.shape) #查看数组结构 |
Out[3]: | 数组维度为: (3, 4) |
In[4]: | print('数组维度为:',arr2.dtype) #查看数组类型 |
Out[4]: | 数组维度为: int64 |
In[5]: | print('数组元素个数为:',arr2.size) #查看数组元素个数 |
Out[5]: | 数组元素个数为: 12 |
In[6]: | print('数组每个元素大小为:',arr2.itemsize) #查看数组每个元素大小 |
Out[6]: | 数组每个元素大小为: 8 |
数组arr1只有一个元素,因此它是一维数组。而数组arr2有三行四列元素,因此它是二维数组,其中第0轴的长度为3(即行数),第1轴的长度为4(即列数)。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。代码 42将数组arr2的shape改为(4,3),注意从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素的顺序并没有改变。
代码 42重新设置数组shape
In[7]: | arr2.shape = 4,3 #重新设置shape维度 print('重新设置shape维度后的arr2为:',arr2) |
Out[7]: | 重新设置shape维度后的arr2为: [[ 1 2 3] [ 4 4 5] [ 6 7 7] [ 8 9 10]] |
arange函数类似于Python基础自带函数range,通过指定开始值,终值和步长来创建一维数组,创建的数组是不含终值的,如代码 43所示。
代码 43使用arange函数创建数组
In[9]: | print('使用arange函数创建的数组为:',np.arange(0,1,0.1)) #创建一维数组 |
Out[9]: | 使用arange函数创建的数组为: [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] |
linspace函数通过指定开始值,终值和元素个数来创建一维数组,默认设置是包括终值,这一点需要和arange函数区分,如代码 44所示。
代码 44使用linspace函数创建数组
In[10]: | print('使用linspace函数创建的数组为:',np.linspace(0, 1, 12)) |
Out[10]: | 使用linspace函数创建的数组为: [0. 0.09090909 0.18181818 0.27272727 0.36363636 0.45454545 0.54545455 0.63636364 0.72727273 0.81818182 0.90909091 1. ] |
logspace函数和linspace函数类似,其创建的是等比数列。生成1()到100(),有20个元素的等比数列,如代码 45所示。
In[11]: | print('使用logspace函数创建的数组为:',np.logspace(0, 2, 20)) |
Out[11]: | 使用logspace函数创建的数组为: [ 1. 1.27427499 1.62377674 2.06913808 2.6366509 3.35981829 4.2813324 5.45559478 6.95192796 8.8586679 11.28837892 14.38449888 18.32980711 23.35721469 29.76351442 37.92690191 48.32930239 61.58482111 78.47599704 100. ] |
NumPy还提供了其他函数创建特殊数组,如zeros,eye,diag和ones等。
其中zeros函数,用来创建值全部为0的数组,即创建的数组值全部填充为0,如代码 46所示。
代码 46 使用zeros函数创建数组
In[12]: | print('使用zeros函数创建的数组为:',np.zeros((2,3))) |
Out[12]: | 使用zeros函数创建的数组为: [[ 0. 0. 0.] [ 0. 0. 0.]] |
eye函数,用来生成类似单位数组,在主对角线上的元素为1,其他的元素为0,如代码 47所示。
代码 47 使用eye函数创建数组
In[13]: | print('使用eye函数创建的数组为:',np.eye(3)) |
Out[13]: | 使用eye函数创建的数组为: [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] |
diag函数,创建类似对角的数组。即除对角线以外其他元素都为0。对角线上的元素可以是0或其他值,如代码 48所示。
代码 48 使用diag函数创建数组
In[14]: | print('使用diag函数创建的数组为:',np.diag([1,2,3,4])) |
Out[14]: | 使用diag函数创建的数组为: [[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]] |
ones函数,用来创建元素全部为1的数组,即创建的数组元素全部填充为1,如代码 49所示。
In[15]: | print('使用ones函数创建的数组为:',np.ones((5,3))) |
Out[15]: | 使用ones函数创建的数组为: [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]] |
对于NumPy数组中的数据类型,每一个数据类型均有对应的转换函数,如代码 410所示。
代码 410 数组数据类型转换
In[16]: | print('转换结果为:',np.float64(42)) #整型转换为浮点型 |
Out[16]: | 转换结果为: 42.0 |
In[17]: | print('转换结果为:',np.int8(42.0)) #浮点型转换为整型 |
Out[17]: | 转换结果为: 42 |
In[18]: | print('转换结果为:',np.bool(42)) #整型转换为布尔型 |
Out[18]: | 转换结果为: True |
In[19]: | print('转换结果为:',np.bool(0)) #整型转换为布尔型 |
Out[19]: | 转换结果为: False |
In[20]: | print('转换结果为:',np.float(True)) #布尔型转换为浮点型 |
Out[20]: | 转换结果为: 1.0 |
In[21]: | print('转换结果为:',np.float(False)) #布尔型转换为浮点型 |
Out[21]: | 转换结果为: 0.0 |
为了更好地帮助读者理解数据结构,下面将创建一个存储餐饮企业库存信息的数据类型。其中,用一个长度为40个字符的字符串来记录商品的名称,用一个64位的整数来记录商品的库存数量,最后用一个64位的单精度浮点数来记录商品的价格,具体步骤如下。
- 创建数据类型,如代码 411所示。
In[22]: | df = np.dtype([("name", np.str_, 40), ("numitems", np.int64), ("price",np.float64)]) print('数据类型为:',df) |
Out[22]: | 数据类型为: [('name', '<U40'), ('numitems', '<i8'), ('price', '<f8')] |
- 查看数据类型,可以直接查看或者使用numpy.dtype函数查看,如代码 412所示。
代码 412 查看数据类型
In[23]: | print('数据类型为:',df["name"]) |
Out[23]: | 数据类型为:<U40 |
In[24]: | print('数据类型为:',np.dtype(df["name"])) |
Out[24]: | 数据类型为:<U40 |
在使用array函数创建数组时,数组的数据类型默认是浮点型。自定义数组数据,则可以预先指定数据类型,如代码 413所示。
In[25]: | itemz = np.array([("tomatoes", 42, 4.14), ("cabbages", 13, 1.72)], dtype=df) print('自定义数据为:',itemz) |
Out[25]: | 自定义数据为: [('tomatoes', 42, 4.14) ('cabbages', 13, 1.72)] |