设为首页 加入收藏

TOP

初识numpy的多维数组对象ndarray(一)
2017-09-30 16:23:17 】 浏览:8006
Tags:初识 numpy 多维 对象 ndarray

PS:内容来源于《利用Python进行数据分析》

 

一、创建ndarray

  1、array :将一个序列(嵌套序列)转换为一个数组(多维数组) 

In[2]: import numpy as np
In[3]: arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In[4]: arr
Out[4]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])

In[5]: arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
In[6]: arr
Out[6]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
View Code

  2、arange:类似于内置的range,返回的是一个ndarray对象。通过reshape指定数组维度

In[8]: arr = np.arange(1, 10).reshape(3, 3)
In[9]: arr
Out[9]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
View Code

  3、ones、ones_like、zeros、zeros_like:根据指定shape和dtype创建一个全1或全0数组;ones_like或zeros_like另一个数组为参数,根据参数数组的shape和dtype创建全1或全0数组

arr = np.ones((2, 4), dtype = np.int32)
arr
Out[11]: 
array([[1, 1, 1, 1],
       [1, 1, 1, 1]])
arr2 = np.zeros_like(arr)
arr2
Out[13]: 
array([[0, 0, 0, 0],
       [0, 0, 0, 0]])
View Code

  4、empty、empy_like:类似ones、ones_like,只是分配的内存空间不填充任何值,即数组的元素是未初始化的

arr = np.empty((3, 3), dtype = np.float64)
arr
Out[15]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
arr1 = np.empty_like(arr)
arr1
Out[17]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
View Code

  5、eye、identity:创建一个N x N单位矩阵(对角线为1,其余为0)

In[18]: arr = np.eye(4, dtype = np.float32)
In[19]: arr
Out[19]: 
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]], dtype=float32)
In[20]: arr1 = np.identity(4, dtype = np.int32)
In[21]: arr1
Out[21]: 
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
View Code

 

 二、ndarray的shape和dtype

  ndarray是通用的同构数据多维容器,其中的所有元素必须是相同的数据类型。

  ndarray.shape 获取一个表示数组各维度大小的元组。 ndarray.dtype获取数组元素的数据类型。

  numpy的数据类型有:int8 int16 int32 int64 uint8 uint16 uint32 uint64 float16 float32 float64 float128 complex64 complex128 complex256 bool object(O) string_(S) unicode_(U)

In[2]: import numpy as np
In[3]: arr = np.arange(16).reshape((2, 2, 4))
In[4]: arr.shape
Out[4]: (2, 2, 4)
In[5]: arr.dtype
Out[5]: dtype('int32')
View Code

  可以通过ndarray的astype方法显示地转换dtype。如果转换过程失败了(类型转换不能实现),会引发TypeError。调用astype会创建一个新的数组,即使新旧dtpye相同也会如此

In[16]: arr = np.array(10)
In[17]: arr.dtype
Out[17]: dtype('int32')
In[18]: float_arr = arr.astype(np.float32)
In[19]: float_arr.dtype
Out[19]: dtype('float32')
In[20]: str = np.array(['1.3', '-4.5', '33'], dtype = np.string_)
In[21]: str.dtype
Out[21]: dtype('S4')
In[22]: num = str.astype(np.float32)
In[23]: num.dtype
Out[23]: dtype('float32')
View Code

 

三、数组和标量之间的矢量化运算

  大小相等的数组之间的任何算术运算都会将运算应用到元素级。

In[26]: arr = np.arange(1, 10).reshape((3, 3))
In[27]: arr
Out[27]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
In[28]: arr ** 2
Out[28]: 
array([[ 1,  4,  9],
       [16, 25, 36],
       [49, 64, 81]])
In[29]: arr - arr
Out[29]: 
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
In[30]: arr * arr.T
Out[30]: 
array([[ 1,  8, 21],
       [ 8, 25, 48],
       [21, 48, 81]])
View Code

 

四、基本的索引和切片

  数组切片形式上和Python列表的截取功能相似,但是数组切片获取的是原始数组的视图,这意味着不会创建新的数组,数据也不会被复制,在视图上的任何修改都会直接作用源数组上。

In[2]: import numpy as np
In[3]: arr = np.arange(10)
In[4]: arr
Out[4]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In[5]: arr[1:6]
Out[5]: array([1, 2, 3, 4, 5])
In[6]: arr[1:6] = [5, 4, 3, 2, 1]
In[7]: arr
Out[7]: array([0, 5, 4, 3, 2, 1, 6, 7, 8, 9])
View Code

  数组的索引用以获取数组的元素(与C的数组相同)。在多维数组中,如果忽略了后面维度的索引,则返回对象为维度低一点的ndarray对象。通过索引获取的数组子集,也是源数组的视图

  通过索引访问数组,arr[i][j][k] 与 arr[i, j, k] 是等价的。

In[8]: arr = np.arange(1, 13).res
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一个面试小题(今年年初在团结湖.. 下一篇python-爬图小样

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目