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

python numpy 模块学习

2015-12-08 23:23 246 查看

numpy模块

这是一个科学计数模块。
入门文章:
/article/1280320.html
下载地址:
http://sourceforge.net/projects/numpy/files/NumPy/

数组对象array
创建数组:

improt numpy as np

data1=[1,2,3.5,6]

arr1=np.array(data1) #创建一个一维数组。

data2=[[1,2,3,4],[5,6,7,8]]

arr2=np.array(data2) #创建一个二维数组。

zeros_arr=np.zeros((2,3)) #创建一个2行3列的0数组。

ones_arr=np.ones((2,3)) #创建一个2行3列的1数组。

empty_arr=np.empty((2,3,4)) #创建一个三维的数组。

np.arange(15) #类似range(),就是range()返回的是一个list,arange返回的是一个数组。

np.eye(5) #创建一个5*5的单位矩阵,对角线为1,其余部分为0.

np.identity(5) #作用同np.eye(5)
切片

一维说明:

arr=np.arange(10)

arr[5] #输出5

arr[5:8] #输出array([5,6,7])

arr[5:8]=12

arr #输出array([0,1,2,3,4,12,12,12,8,9])

注意:数组的切片是原始数据的一个视图,所以对视图上的任何修改都会影响到原数组,如果需要创建一个原数组的副本,需要写成arr.copy()。

arr_slice=arr[5:8]

arr_slice[1]=12345

arr_slice #输出array([0,1,2,3,4,12,12345,12,8,9])
多维说明:

arr3d=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])

arr3d[0] #输出array([[1,2,3],[4,5,6]])

arr3d[1,0] #输出array([7,8,9])这里等价于arr3d[1][0]

arr3d[:1,1:2,:2] #输出array([[[4.5]]])

arr3d[0,1,:2] #输出array([4.5])
布尔型索引:

In [46]: from numpy.random import randn #随机生成正态分布数组
In [47]: names=np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
In [48]: data=randn(7,4)
Out[48]:array([[ 0.45499308, -0.91504194, 0.8234681 , 1.73401825],

[ 0.46845492, -0.46437185, 2.08760975, -0.37335943],

[-0.08938842, 1.21683707, 1.81470377, -1.4222781 ],

[-0.47412094, 0.73135265, -0.32416488, -0.92098348],

[-0.170789 , 0.68406968, -0.32169794, -0.0801254 ],

[ 1.21267635, -0.45948765, -2.64714274, -1.40673058],

[ 0.95791275, 0.07200942, -1.18066411, -0.85432278]])
In [49]: data[names=='Bob']

Out[49]:

array([[ 0.45499308, -0.91504194, 0.8234681 , 1.73401825],

[-0.47412094, 0.73135265, -0.32416488, -0.92098348]])
#如果需要多个布尔条件的组合,使用&(和),|(或)之类的布尔运算符即可:
In [50]: mask=(names=='Bob')|(names=='Will')

In [51]: data[mask]

Out[51]:

array([[ 0.45499308, -0.91504194, 0.8234681 , 1.73401825],

[-0.08938842, 1.21683707, 1.81470377, -1.4222781 ],

[-0.47412094, 0.73135265, -0.32416488, -0.92098348],

[-0.170789 , 0.68406968, -0.32169794, -0.0801254 ]])
random模块:numpy中包含一个random模块。

random.randint(from,to,n):产生随机整数。范围为from到to,产生n个随机数。
数组计算函数:

cumsum():返回一个长度和数组长度相同的函数,这个函数是数组的累加函数。可以带一个axis参数。
cumprod():累乘函数,返回一个数组,同样可以带一个axis参数。
sum()
mean()
std,var:求标准差和方差
min,max:求最大最小
argmin,argmax:求最大和最小Ture索引
文件输入输出
import numpy as np

np.save(filename,arr):将命名空间的arr保存到filename中,如果filename没有扩展名.npy,此扩展名会自动加上。
np.load(filename):读取filename中的数组到命名空间中。
np.savez(filename,a=arr1,b=arr2):可以将命名空间的数组用任意自定义的名字存到filename中

例子:

>>> outfile = TemporaryFile()

>>> np.savez(outfile, x=x, y=y)

>>> outfile.seek(0)

>>> npzfile = np.load(outfile)

>>> npzfile.files

['y', 'x']

>>> npzfile['x']

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.loadtxt(filename,delimiter=','):读取文本文件数组,用','分割数组。
np.savetxt(filename,delimiter=','):作用和上面的正好相反。
函数介绍:
concatenate(list,axis):将多个数组按照指定的axis方向进行堆积。list是数组组成的list,axis表示堆积的方向。
where(condition,x,y):返回一个数组,类似于decode函数,如果condition对应位置为True返回x对应部分,否则返回y对应部分。

random.permutation(n):随机生成一个n个数字的排列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: