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

NumPy基础入门学习

2014-10-18 15:17 429 查看
对于习惯使用了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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: