创建ndarray的方法

Posted 周屹峰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建ndarray的方法相关的知识,希望对你有一定的参考价值。

1.array

array将输入数据(列表、元组、数组或其他序列类型)转换为ndarray。要么推断出dtype,要么显式指定dtype。默认直接复制输入数据。 
不显式说明时,array会尝试为新建的这个数组推断出一个较为合适的数据类型。数据类型保存在一个dtype对象中。

 1 data1 = [1,2,2.2,3,0,4]
 2 arr1 = np.array(data1)
 3 print(arr1)
 4 print(arr1.dtype)
 5 print(arr1.ndim)
 6 print(arr1.shape)
 7 
 8 data2 = [[1,2,3,4],[5,6,7,8]]
 9 arr2 = np.array(data2)
10 print(arr2)
11 print(arr2.dtype)
12 print(arr2.ndim)
13 print(arr2.shape)

上面代码运行结果为:

1 [ 1.   2.   2.2  3.   0.   4. ]
2 float64
3 1
4 (6,)
5 [[1 2 3 4]
6  [5 6 7 8]]
7 int32
8 2
9 (2, 4)

2.asarray

nsarray将输入转换为ndarray,如果输入本身就是一个ndarray就不进行复制。 
源码在Lib\site-packages\numpy\core\numeric.py第463行。 
观察其源码:

1 def asarray(a, dtype=None, order=None):
2     return array(a, dtype, copy=False, order=order)

可见asarray与array唯一的区别就是array会默认复制一份对象,而asarray不会(输入本身就是一个ndarray时)。例:

1 >>> arr1 = np.array([1,2,3])
2 >>> np.asarray(arr1) is arr1
3 True
4 >>> np.array(arr1) is arr1
5 False

3.arange

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

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

4.zeros、zeros_like

根据指定的形状和dtype创建一个全0数组。zeros_like以另一个数组为参数,并根据其形状和dtype创建一个全0数组。

1 >>>np.zeros((2,5))
2 array([[ 0.,  0.,  0.,  0.,  0.],
3        [ 0.,  0.,  0.,  0.,  0.]])
1 >>> arr1 = np.arange(10)
2 >>> arr2 = np.zeros_like(arr1)
3 >>> arr2
4 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)。

1 >>> np.identity(5)
2 array([[ 1.,  0.,  0.,  0.,  0.],
3        [ 0.,  1.,  0.,  0.,  0.],
4        [ 0.,  0.,  1.,  0.,  0.],
5        [ 0.,  0.,  0.,  1.,  0.],
6        [ 0.,  0.,  0.,  0.,  1.]])

eye在单参时与identity功能相同:

1 >>> np.eye(5)
2 array([[ 1.,  0.,  0.,  0.,  0.],
3        [ 0.,  1.,  0.,  0.,  0.],
4        [ 0.,  0.,  1.,  0.,  0.],
5        [ 0.,  0.,  0.,  1.,  0.],
6        [ 0.,  0.,  0.,  0.,  1.]])

除此之外,eye后面可加参数k,表示第几条对角线为全1,如:

1 >>> np.eye(5,k=1)
2 array([[ 0.,  1.,  0.,  0.,  0.],
3        [ 0.,  0.,  1.,  0.,  0.],
4        [ 0.,  0.,  0.,  1.,  0.],
5        [ 0.,  0.,  0.,  0.,  1.],
6        [ 0.,  0.,  0.,  0.,  0.]])
1 >>> np.eye(5,k=-2)
2 array([[ 0.,  0.,  0.,  0.,  0.],
3        [ 0.,  0.,  0.,  0.,  0.],
4        [ 1.,  0.,  0.,  0.,  0.],
5        [ 0.,  1.,  0.,  0.,  0.],
6        [ 0.,  0.,  1.,  0.,  0.]])

eye还可以指定长宽(可理解为将单位矩阵截取一部分)。如:

1 >>> np.eye(3,4)
2 array([[ 1.,  0.,  0.,  0.],
3        [ 0.,  1.,  0.,  0.],
4        [ 0.,  0.,  1.,  0.]])

 


事实上,通过查看源码(Lib\site-packages\numpy\core\numeric.py),可以很容易地看清各种函数之间的关系。


 

以上是关于创建ndarray的方法的主要内容,如果未能解决你的问题,请参考以下文章

Numpy —— 随机数np.random

Python之numpy详细教程

创建ndarray

Python的Numpy库的ndarray对象常用构造方法及初始化方法

NumPy之:ndarray多维数组操作

数据分析2 numpy(ndarray数组,属性,创建,索引切片,运算,函数,随机数), Pandas(Series创建,缺失值处理,特性,索引,DataFrame)