创建ndarray的方法

1.array

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)

2.asarray

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

3.arange

arange类似于内置的range,但返回的是一个ndarray而不是列表。(Python内置函数range的数组版)

>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

4.zeros、zeros_like

根据指定的形状和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])

5.ones、ones_like

与zeros、zeros_like类似,只不过产生全1数组。

6.empty、empty_like

与zeros、zeros_like类似,不过只分配内存空间,不填充任何值(一些未初始化的垃圾值)。

7.eye、identity

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),可以很容易地看清各种函数之间的关系。


你可能感兴趣的:(NumPy,Python)