mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

对于习惯使用了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

posted on 2017-06-15 09:34  mthoutai  阅读(203)  评论(0编辑  收藏  举报