NumPy基础入门学习

来源:互联网 发布:淘宝评分多久生效 编辑:程序博客网 时间:2024/06/10 06:03

对于习惯使用了MATLAB的用户而言,学习NumPy这个python工具包付出的成本应该是不大的。


NumPy的主要的object是多维数组,是一个有相同类型的数字等构成的一张表格,可以通过元组进行索引。本篇主要列出NumPy中最常用的一些操作。

1,ndarray 类型的一些属性

>>> from numpy import *>>> a=array([[1,2,3],[4,5,6]])>>> aarray([[1, 2, 3],       [4, 5, 6]])>>>

以上给出了怎么样初始化一个NumPy 数组。这个数组的类型,维度,包含元素的个数,元素类型,数据等都可以通过其相应的属性来得到

 #  元素类型    ndarray.dtype>>> a.dtypedtype('int64')>>> 

 # 维度        ndarray.shape>>> a.shape(2, 3)

 #包含元素的个数 ndarray.size>>> a.size6


2,创建自定义大小的数组,改变数组的shape

默认系统类型

>>> a=zeros((3,4))>>> aarray([[ 0.,  0.,  0.,  0.],       [ 0.,  0.,  0.,  0.],       [ 0.,  0.,  0.,  0.]])

初始化数据的类型

>>> a=ones((5,4),dtype=int64)>>> aarray([[1, 1, 1, 1],       [1, 1, 1, 1],       [1, 1, 1, 1],       [1, 1, 1, 1],       [1, 1, 1, 1]])>>> a.dtypedtype('int64')


改变数组的shape               reshape函数

>>> a=arange(15)>>> aarray([ 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)))>>> aarray([[ 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]>>> barray([[[ 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,矩阵算术运算

>>> aarray([[ 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

0 0