对于习惯使用了MATLAB的用户而言,学习NumPy这个python工具包付出的成本应该是不大的。
NumPy的主要的object是多维数组,是一个有相同类型的数字等构成的一张表格,可以通过元组进行索引。本篇主要列出NumPy中最常用的一些操作。
1,ndarray 类型的一些属性
>>> from numpy import * >>> a=array([[1,2,3],[4,5,6]]) >>> a array([[1, 2, 3], [4, 5, 6]]) >>>
以上给出了怎么样初始化一个NumPy 数组。这个数组的类型,维度,包含元素的个数,元素类型,数据等都可以通过其相应的属性来得到
# 元素类型 ndarray.dtype >>> a.dtype dtype('int64') >>>
# 维度 ndarray.shape >>> a.shape (2, 3)
#包含元素的个数 ndarray.size >>> a.size 6
2,创建自定义大小的数组,改变数组的shape
默认系统类型
>>> a=zeros((3,4)) >>> a array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
初始化数据的类型
>>> a=ones((5,4),dtype=int64) >>> a array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]) >>> a.dtype dtype('int64')
改变数组的shape reshape函数
>>> a=arange(15) >>> a array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) >>> a.reshape((5,3)) array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11], [12, 13, 14]])
技巧:对于reshape这个函数,可以只指定多少行,或者只指定多少列,剩下的工作由这个函数提我们来做,提高操作的灵活性。
>>> a.reshape((5,:-1)) array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11], [12, 13, 14]]) >>> a.reshape((-1,5)) array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
3,数组索引
1)通过指定元组来进行索引
>>> a=floor(10*random.random((5,4))) >>> a array([[ 4., 6., 4., 9.], [ 4., 7., 2., 1.], [ 4., 9., 7., 3.], [ 5., 4., 6., 0.], [ 4., 3., 2., 9.]]) >>> a[(1,1)] 7.0 >>> a[(3,2)] 6.0
2)一次索引多个元素
索引出多行,可以将下标存放在一个array里
>>> index=array([1,3,4]) #要索引1,3,4行 >>> a[index] array([[ 4., 7., 2., 1.], [ 5., 4., 6., 0.], [ 4., 3., 2., 9.]])
>>> index=array([[1,2],[1,3]]) >>> b=a[index] >>> b array([[[ 4., 7., 2., 1.], [ 4., 9., 7., 3.]], [[ 4., 7., 2., 1.], [ 5., 4., 6., 0.]]]) >>> b.shape (2, 2, 4)
以上操作都是对一行进行索引的,那么怎么去索引到第几行,第几列呢
>>> i=array([0,1,2,3]) >>> j=array([3,2,1,0]) >>> a[i,j] array([ 9., 2., 9., 5.])
返回的是 一个一维矩阵,行存放在i 中,列存放在j中
假设要将返回的元素存放在2*2的矩阵中
>>> i=array([[0,1],[2,3]]) >>> j=array([[3,2],[2,1]]) >>> a[i,j] array([[ 9., 2.], [ 7., 4.]]
同时还支持 以下几种索引方式,与MATLAB相似
>>> a[:,1] array([ 6., 7., 9., 4., 3.]) >>> a[:,3] array([ 9., 1., 3., 0., 9.]) >>> a[1,:] array([ 4., 7., 2., 1.]) >>> a[:,1:3] array([[ 6., 4.], [ 7., 2.], [ 9., 7.], [ 4., 6.], [ 3., 2.]])
3,矩阵算术运算
>>> a array([[ 4., 6., 4., 9.], [ 4., 7., 2., 1.], [ 4., 9., 7., 3.], [ 5., 4., 6., 0.], [ 4., 3., 2., 9.]]) >>> a.sum() 93.0 >>> a.sum(axis=0) #行相加 array([ 21., 29., 21., 22.]) >>> a.sum(axis=1) #列相加 array([ 23., 14., 23., 15., 18.]) >>> a.min() 0.0 >>> a.min(axis=0) array([ 4., 3., 2., 0.]) >>> a.min(axis=1) array([ 4., 1., 3., 0., 2.]) >>> a.max() 9.0 >>> a.max(axis=0) array([ 5., 9., 7., 9.]) >>> a.max(axis=1) array([ 9., 7., 9., 6., 9.])
数组之间算术运算
a+b; a-b
更多可参考:Tentative NumPy Tutorial
时间: 2024-11-05 20:46:12