码迷,mamicode.com
首页 > 其他好文 > 详细

创建ndarray的方法

时间:2017-10-28 22:02:19      阅读:481      评论:0      收藏:0      [点我收藏+]

标签:ges   数据类型   矩阵   部分   name   源码   range   eric   运行   

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的方法

标签:ges   数据类型   矩阵   部分   name   源码   range   eric   运行   

原文地址:http://www.cnblogs.com/zhouyifeng/p/7748061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!