创建ndarray
Numpy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器,是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。
创建数组最简单的方法就是array函数,它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组。
以一个列表为例:
1 In [2]: import numpy as np 2 3 In [3]: simple = [1,2.3,4,5] 4 5 In [4]: arr = np.array(simple) 6 7 In [5]: arr 8 Out[5]: array([ 1. , 2.3, 4. , 5. ])
嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多维数组:
1 In [6]: simple1 = [[1,2,3,4],[5,6,7,8]] 2 3 In [7]: arr1 = np.array(simple1) 4 5 In [8]: arr1 6 Out[8]: 7 array([[1, 2, 3, 4], 8 [5, 6, 7, 8]]) 9 10 In [9]: arr1.ndim 获得数组的维数 11 Out[9]: 2 12 13 In [10]: arr1.shape 14 Out[10]: (2, 4)
除非显示说明,np.array会尝试为新建的数组推断出一个较为合适的数据类型,数据类型保存在一个特殊的dtype对象中。
1 In [12]: arr.dtype 2 Out[12]: dtype('float64') 3 4 In [13]: arr1.dtype 5 Out[13]: dtype('int64')
除了np.array之外,还有一些函数也可以新建数组。比如zeros和ones分别可以创建指定长度或形状的全0或全1数组。empty可以创建一个没有任何具体值的数组。要用这些方法创建多维数组,只需传入一个表示形状的元祖即可。
1 In [14]: np.zeros(10) 2 Out[14]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) 3 4 In [15]: np.ones(10) 5 Out[15]: array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) 6 7 In [16]: np.empty((2,3)) 8 Out[16]: 9 array([[ 0.00000000e+000, 8.20622089e-317, 4.65914971e-317], 10 [ 6.90846568e-310, 6.90847131e-310, 1.25836781e-316]])
arange是Python内置函数range的数组版
1 In [17]: np.arange(10) 2 Out[17]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
数组创建函数
函数 | 说明 |
array | 将输入数据(列表、元祖、数组或其他序列类型)转换为ndarray |
asarray | 将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制 |
arange | 类似于内置的range,但返回的是一个ndarray而不是列表 |
ones、ones_like | 根据指定的形状和dtype创建一个全1数组。ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组 |
zeros、zeros_like | 类似于ones和ones_like,只不过产生的是全0数组而已 |
empty、empty_like | 创建新数组,只分配内存空间但不填充任何值 |
eye、identity | 创建一个正方的NxN单位矩阵(对角线为1,其余为0) |