array将输入数据(列表、元组、数组或其他序列类型)转换为ndarray。要么推断出dtype,要么显式指定dtype。默认直接复制输入数据。
不显式说明时,array会尝试为新建的这个数组推断出一个较为合适的数据类型。数据类型保存在一个dtype对象中。
data1 = [1,2,2.2,3,0,4]
arr1 = np.array(data1)
print(arr1)
print(arr1.dtype)
print(arr1.ndim)
print(arr1.shape)
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2)
print(arr2.dtype)
print(arr2.ndim)
print(arr2.shape)
上面代码运行结果为:
[ 1. 2. 2.2 3. 0. 4. ]
float64
1
(6,)
[[1 2 3 4]
[5 6 7 8]]
int32
2
(2, 4)
nsarray将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制。
源码在Lib\site-packages\numpy\core\numeric.py第463行。
观察其源码:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
可见asarray与array唯一的区别就是array会默认复制一份对象,而asarray不会(输入本身就是一个ndarray时)。例:
>>> arr1 = np.array([1,2,3])
>>> np.asarray(arr1) is arr1
True
>>> np.array(arr1) is arr1
False
arange类似于内置的range,但返回的是一个ndarray而不是列表。(Python内置函数range的数组版)
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
根据指定的形状和dtype创建一个全0数组。zeros_like以另一个数组为参数,并根据其形状和dtype创建一个全0数组。
>>>np.zeros((2,5))
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
>>> arr1 = np.arange(10)
>>> arr2 = np.zeros_like(arr1)
>>> arr2
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
与zeros、zeros_like类似,只不过产生全1数组。
与zeros、zeros_like类似,不过只分配内存空间,不填充任何值(一些未初始化的垃圾值)。
identity可创建一个正方的N*N单位矩阵(对角线为1,其余为0)。
>>> np.identity(5)
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
eye在单参时与identity功能相同:
>>> np.eye(5)
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
除此之外,eye后面可加参数k,表示第几条对角线为全1,如:
>>> np.eye(5,k=1)
array([[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.],
[ 0., 0., 0., 0., 0.]])
>>> np.eye(5,k=-2)
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.]])
eye还可以指定长宽(可理解为将单位矩阵截取一部分)。如:
>>> np.eye(3,4)
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.]])
事实上,通过查看源码(Lib\site-packages\numpy\core\numeric.py),可以很容易地看清各种函数之间的关系。