您的位置:首页 > 编程语言 > Python开发

numpy 基础知识

2015-12-18 17:23 681 查看
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。

此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。

NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

创建数组

可以通过给array函数传递Python的序列对象创建数组。

NumPy提供了很多专门用来创建数组的函数,如arange函数、linspace函数、logspace函数,random函数、zeros、ones等

import numpy as np
a=np.array([1,2,3,4])
b=np.array((1,2,3,4))
#等差/比
print np.arange(1,10,1)#[1 2 3 4 5 6 7 8 9]
print np.linspace(1,10,5)#[  1.     3.25   5.5    7.75  10.  ]
print np.logspace(1,2,5)#[10. 17.7827941 31.6227766  56.23413252 100. ]
#随机数
print np.random.rand(1,5)#第一个参数代表一行[[ 0.54190009  0.88740335  0.26858951  0.52750372  0.83566541]]
print np.random.rand(2,5)#两行
print np.random.randint(2,size=5)#5个随机整数[0,2)
print np.random.randint(2,5,size=5)#5个随机整数[2,5)
#全0或全1
print np.zeros(3)#[ 0.  0.  0.  0.  0.]
print np.zeros((3,3))#三行三列为0


获取属性

ndarray.shape

数组的维度。这是一个指示数组在每个维度上大小的整数元组。

ndarray.size

数组元素的总个数,等价于shape属性中元组元素的乘积。

ndarray.dtype

用来描述数组中元素类型的对象.

ndarray.reshape

使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变

a=np.array([[1,2,3,4],[2,3,4,5]])
print a.shape,a.size,a.dtype
//(2, 4) 8 int32
d=a.reshape((4,-1))
//[[1 2],[3 4],[2 3],[4 5]]


注意:

total size of new array must be unchanged

数组a和d其实共享数据存储内存区域,因此修改其中任意一个数组的元素都会同时修改另外一个数组的内容

存取数据

数组元素的存取方法和Python的标准方法相同;

和Python的列表序列不同,通过下标范围获取的新的数组是原始数组的一个视图。它与原始数组共享同一块数据空间

使用布尔数组,使用布尔数组作为下标获得的数组不和原始数组共享数据空间

a=np.random.rand(5)#[ 0.05056014  0.74492156  0.30582769  0.75466489  0.9813687 ]
a[a>0.5]#[ 0.74492156  0.75466489  0.9813687 ]


基本运算

数组的算术运算是按元素的。

a= np.arange(5)

b=np.zeros(5)

print a-b#[ 0. 1. 2. 3. 4.]

print a*b#[ 0. 0. 0. 0. 0.]

NumPy中的乘法运算符 * 指示按元素计算,矩阵乘法可以使用 dot 函数或创建矩阵对象实现。dot 函数在处理一维时是点乘,二维时是矩阵相乘。

a=np.array([1,2,3])

b=np.array([3,2,1])

print np.dot(a,b)#10

aa=np.array([[1,1]])

bb=np.arange(1,5).reshape(2,-1)

print np.dot(aa,bb)#[[4 6]]

函数和方法



参考文献

Numpy教程1

Numpy教程2

Numpy文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: