码迷,mamicode.com
首页 > 其他好文 > 详细

NumPy基础入门学习

时间:2014-10-18 15:32:47      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   使用   sp   

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

NumPy基础入门学习

标签:style   blog   http   color   io   os   ar   使用   sp   

原文地址:http://blog.csdn.net/jxlijunhao/article/details/40211077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!