numpy入门总结

import numpy as np
data1=[[34,2,3,4],
       [22,45,67,21],
       [56,89,78.7,77.5] ]
arr1=np.array(data1)
print arr1.ndim       #2
print arr1.shape      # (3L, 4L)
print arr1.size       #12
print arr1.dtype      #float64
print arr1.itemsize   # 8

Numpy 入门教程(  http://scipy.github.io/old-wiki/pages/Tentative_NumPy_Tutorial.html  )

NumPy 提供了对多维数组的支持,与Python原生支持的List类型不同,数组的所有元素必须同样的类型。数组的维度被称为axes,维数称为 rank。 

Numpy的数组类型为 ndarray, ndarray 重要属性包括

  • ndarray.ndim:数组的维数,也称为rank
  • ndarray.shape:数组各维的大小tuple 类型,对一个列的矩阵来说, shape 为 (n,m)
  • ndarray.size:元素的总数。 
  • Ndarray.dtype:每个元素的类型,可以是 numpy.int32, numpy.int16, and numpy.float64 等。 
  • Ndarray.itemsize:每个元素占用的字节数。
  • Ndarray.data:指向数据内存。
  • ----------------------常用的方法---------------------------------
  • transpose() ,根据轴组成的编号进行转置,.T  属性仅代表转置, dot() 计算矩阵内积 Xt.X
创建ndarray( 生成数组 ):有许多种方法生成数组。比如,可以将Python list 或 tuple 转化为数组,转化后的数组元素的类型由原来的对象的类型来决定。
1)arr1=np.array([12,34,56,11,890])
2)arr2=np.zeros(10) ; np.zeros((3,2))
3)arr3=np.ones(10)
4)arr4=np.empty(10)

>> from numpy  import *
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b = array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
>>> b = array( [ (1.5,2,3), (4,5,6) ] )
>>> b
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])</span>
生成数组时也可以指定元素的数据类型:

>> c = array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])</span>

通常,我们无法事先知道数组元素的具体值,但是数组大小是已知的。 这时可以用下面几种方法生成数组。 

zeros 函数生成元素全部为0的数组,ones函数生成元素全部为1的数组empty函数生成元素没有赋值的数组,这时元素值由内存中原来的内容决定。 默认的,生成的数组的元素类型为float64.

>> zeros( (3,4) )
array([[0.,  0.,  0.,  0.],
       [0.,  0.,  0.,  0.],
       [0.,  0.,  0.,  0.]])</span>
<span style="font-size:12px;">>> ones( (2,3,4), dtype=int16 )                # dtype can also be specified
array([[[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]],
       [[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]]], dtype=int16)
>>empty( (2,3) )
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])</span></span>
In [21]: arr
Out[21]: array([12, 34, 21])
In [22]: arr.dtype
Out[22]: dtype('int32')
In [23]: arr_float=arr.astype(np.float64)  #修改类型
In [24]: arr_float
Out[24]: array([ 12.,  34.,  21.])</span>
arange 函数生成的数组的元素按照等比数列排布,类似于 range函数。
>>> arange( 10, 30, 5 )
array([10, 15, 20, 25])
>>> arange( 0, 2, 0.3 )                 # it accepts float arguments
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

屏幕输出 Arrays

当用print 打印一个 array输出结果类似于 lists: 

>> a = arange(6)                         # 1d array
>>> print a
[0 1 2 3 4 5]
>>> b = arange(12).reshape(4,3)           # 2d array
>>> print b
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
>>> c = arange(24).reshape(2,3,4)         # 3d array
>>> print c
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
如果我们需要显示完整的数组,可以如下设置:
  1. >>> set_printoptions(threshold='nan')  

数组与标量之间的运算:

<span style="font-weight: normal;">data1=[[1,2,3,4],
       [6,8,10,12] ]
arr1=np.array(data1)
print arr1
print arr1*arr1
print 1/arr1
print arr1-arr1
print arr1*0.5
print arr1**2</span>
结果为如下所示:
<span style="font-weight: normal;">[[ 1  2  3  4]
 [ 6  8 10 12]]
[[  1   4   9  16]
 [ 36  64 100 144]]
[[1 0 0 0]
 [0 0 0 0]]
[[0 0 0 0]
 [0 0 0 0]]
[[ 0.5  1.   1.5  2. ]
 [ 3.   4.   5.   6. ]]
[[  1   4   9  16]
 [ 36  64 100 144]]</span>
基本的操作:

>>> a = array( [20,30,40,50] )
>>> b = arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([True, True, False, False], dtype=bool)
注意,矩阵相乘的
>>> A = array( [[1,1],
...             [0,1]] )
>>> B = array( [[2,0],
...             [3,4]] )
>>> A*B                         # elementwise product
array([[2, 0],
       [0, 4]])
>>> dot(A,B)                    # matrix product
array([[5, 4],
       [3, 4]])
对于 *=  +=等操作,是改变原来的矩阵,而不是创建一个新的:
>>> a = ones((2,3), dtype=int)
>>> b = random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.69092703,  3.8324276 ,  3.0114541 ],
       [ 3.18679111,  3.3039349 ,  3.37600289]])
>>> a += b                                  # b is converted to integer type
>>> a
array([[6, 6, 6],
       [6, 6, 6]])
通用函数:
>>> B = arange(3)
>>> B
array([0, 1, 2])
>>> exp(B)
array([ 1.        ,  2.71828183,  7.3890561 ])
>>> sqrt(B)
array([ 0.        ,  1.        ,  1.41421356])
>>> C = array([2., -1., 4.])
>>> add(B, C)
array([ 2.,  0.,  6.])

索引与切片: 你若想得到 ndarray切片的一个副本,而不是视图,请显式的进行复制操作,请使用 a[:].copy()
1)对于一维的,与python的list很相似。
>>> a = arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000    # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> a[ : :-1]                                 # reversed a
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
>>> for i in a:
...         print i**(1/3.),
...
nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0
对于多维的矩阵:
>> def f(x,y):
...         return 10*x+y
...
>>> b = fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1]                       # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1]                        # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ]                      # each column in the second and third row of b
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])
>>> b[-1]                                  # the last row. Equivalent to b[-1,:]
arra>>> c = array( [ [[  0,  1,  2],               # a 3D array (two stacked 2D arrays)
...               [ 10, 12, 13]],
...
...              [[100,101,102],
...               [110,112,113]] ] )
>>> c.shape
(2, 2, 3)
>>> c[1,...]                                   # same as c[1,:,:] or c[1]
array([[100, 101, 102],
       [110, 112, 113]])
>>> c[...,2]                                   # same as c[:,:,2]
array([[  2,  13],
       [102, 113]])y([40, 41, 42, 43])

遍历矩阵时:
>>> for row in b:
...         print row
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
或者
>>> for element in b.flat:
...         print element,
...
0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43

改变矩阵的形态:
>>> a = floor(10*random.random((3,4)))
>>> a
array([[ 7.,  5.,  9.,  3.],
       [ 7.,  2.,  7.,  8.],
       [ 6.,  8.,  3.,  2.]])
>>> a.shape
(3, 4)
>>> a.ravel() # flatten the array
array([ 7.,  5.,  9.,  3.,  7.,  2.,  7.,  8.,  6.,  8.,  3.,  2.])
>>> a.shape = (6, 2)
>>> a.transpose()
array([[ 7.,  9.,  7.,  7.,  6.,  3.],
       [ 5.,  3.,  2.,  8.,  8.,  2.]])
>>> a
array([[ 7.,  5.],
       [ 9.,  3.],
       [ 7.,  2.],
       [ 7.,  8.],
       [ 6.,  8.],
       [ 3.,  2.]])
>>> a.resize((2,6))
>>> a
array([[ 7.,  5.,  9.,  3.,  7.,  2.],
       [ 7.,  8.,  6.,  8.,  3.,  2.]])
>>> a.reshape(3,-1)
array([[ 7.,  5.,  9.,  3.],
       [ 7.,  2.,  7.,  8.],
       [ 6.,  8.,  3.,  2.]])
 
numpy中随机数的生成:http://docs.scipy.org/doc/numpy/reference/routines.random.html
numpy.random模块对python内置的random进行了补充
In [26]: np.random.normal(size=(4,4))
Out[26]:
array([[-0.56862985,  1.13477237,  1.53181856,  1.09971751],
       [-0.65793394, -0.46014882,  0.06231399, -0.02359219],
       [-1.12955345,  0.42734625, -0.19184542,  1.36723331],
       [-0.81741533, -0.53757344, -0.39070445,  0.28765111]])
In [30]: np.random.rand(2,3)
Out[30]:
array([[ 0.96702984,  0.54723225,  0.97268436],
       [ 0.71481599,  0.69772882,  0.2160895 ]])
In [31]: 2.5*np.random.randn(2,3)+3    #正态分布N(3,6.25)
Out[31]:
array([[ 1.9542462 , -0.96144309,  1.38073308],
       [ 4.49643793,  3.83062508,  0.13130842]])
线性代数:
>>> from numpy import *
>>> from numpy.linalg import *
>>> a = array([[1.0, 2.0], [3.0, 4.0]])
>>> print a
[[ 1.  2.]
 [ 3.  4.]]
>>> a.transpose()  #转置,a.T
array([[ 1.,  3.],
       [ 2.,  4.]])
>>> inv(a)  #方阵的逆
array([[-2. ,  1. ],
       [ 1.5, -0.5]])
>>> u = eye(2) # unit 2x2 matrix; "eye" represents "I" 生成单位矩阵
>>> u
array([[ 1.,  0.],
       [ 0.,  1.]])
>>> j = array([[0.0, -1.0], [1.0, 0.0]])
>>> dot (j, j) # matrix product  dot,为矩阵的内积
array([[-1.,  0.],
       [ 0., -1.]])
>>> trace(u)  # trace 对角线上元素的和
2.0
>>> y = array([[5.], [7.]])
>>> solve(a, y)  #解线性方程,AX=b,其中,A为方阵
array([[-3.],
       [ 4.]])
>>> eig(j) #求特征值与特征向量。
(array([ 0.+1.j,  0.-1.j]),
array([[ 0.70710678+0.j,  0.70710678+0.j],
       [ 0.00000000-0.70710678j,  0.00000000+0.70710678j]]))
Parameters:
    square matrix

Returns
    The eigenvalues, each repeated according to its multiplicity.

    The normalized (unit "length") eigenvectors, such that the
    column ``v[:,i]`` is the eigenvector corresponding to the
    eigenvalue ``w[i]`` .
存取文件: (http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html)
In [40]: arr=np.arange(10)
In [41]: arr
Out[41]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [42]: np.save('test_arr',arr)
In [43]: np.load('test_arr.npy')
Out[43]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr=np.loadtxt('array_ex.txt',delimiter=',')
np.savetxt()
genfromtxt() #读数据
a = np.arange(0,12,0.5).reshape(4,-1)
a
array([[  0. ,   0.5,   1. ,   1.5,   2. ,   2.5],
       [  3. ,   3.5,   4. ,   4.5,   5. ,   5.5],
       [  6. ,   6.5,   7. ,   7.5,   8. ,   8.5],
       [  9. ,   9.5,  10. ,  10.5,  11. ,  11.5]])
np.savetxt("a.txt", a)
np.loadtxt("a.txt")
array([[  0. ,   0.5,   1. ,   1.5,   2. ,   2.5],
       [  3. ,   3.5,   4. ,   4.5,   5. ,   5.5],
       [  6. ,   6.5,   7. ,   7.5,   8. ,   8.5],
       [  9. ,   9.5,  10. ,  10.5,  11. ,  11.5]])
np.savetxt("a.txt", a, fmt="%d", delimiter=",") #指定存储数据类型为整型,分隔符为,
np.loadtxt("a.txt", delimiter=',') #以,分隔符读取
array([[  0.,   0.,   1.,   1.,   2.,   2.],
       [  3.,   3.,   4.,   4.,   5.,   5.],
       [  6.,   6.,   7.,   7.,   8.,   8.],
       [  9.,   9.,  10.,  10.,  11.,  11.]])
Numpy高级应用(常用的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值