python numpy相关

1.矩阵组合

1.1 比如两个3X3的矩阵,一个放左上一个放右下变成一个新的6X6的矩阵,该怎么弄Orz

import numpy as np
a = np.arange(9).reshape(3,-1)
a

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

b = np.arange(10, 19).reshape(3, -1)
b

array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])
       ```
> top = np.column_stack((a, np.zeros((3,3))))
> top

array([[ 0., 1., 2., 0., 0., 0.],
[ 3., 4., 5., 0., 0., 0.],
[ 6., 7., 8., 0., 0., 0.]])
“`

bottom = np.column_stack((np.zeros((3,3)), b))
bottom

array([[  0.,   0.,   0.,  10.,  11.,  12.],
       [  0.,   0.,   0.,  13.,  14.,  15.],
       [  0.,   0.,   0.,  16.,  17.,  18.]])

np.row_stack((top, bottom))

array([[  0.,   1.,   2.,   0.,   0.,   0.],
       [  3.,   4.,   5.,   0.,   0.,   0.],
       [  6.,   7.,   8.,   0.,   0.,   0.],
       [  0.,   0.,   0.,  10.,  11.,  12.],
       [  0.,   0.,   0.,  13.,  14.,  15.],
       [  0.,   0.,   0.,  16.,  17.,  18.]])

a=arange(9).reshape(3,-1)
b=arange(10,19)reshape(3,-1)
print concatenate((a,b)) #一行一行加下去,和row_stack有什么区别?

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [10 11 12]
 [13 14 15]
 [16 17 18]]

1.2 一维数组组合

a=zeros(2);b=ones(2)
#我想要得到1*4的数组[0 0 1 1]
print a+b  
[1 1]

#可以转换成list
print list(a)+list(b)
[0 0 1 1]

2.numpy.transpose(转置)

原文

from numpy import *
x=linspace(0,4,5)  
array([0.,1.,2.,3.,4.])

x.shape  
(5, )

#想把x从一行,变成一列,如下直接转置会失败:
y=transpose(x)  
#正确的做法是:

x.shape=(5,1)  
y=transpose(x)  
#查看结果:
y  
array([[0.,1.,2.,3.,4.]])

y.shape  
(1,5)

原来transpose的操作依赖于shape参数,对于一维的shape,转置是不起作用的.

3. numpy.cov(协方差矩阵)

from numpy import *
s=[100,120,140]
t=[50,60,70]
y=[s,t]
print y
#[[100,120,140],[50,60,70]]
a=numpy.cov(y)
[[ 400.  200.]
 [ 200.  100.]]

x=[1,0,1]
y=[s,t,x]
a=numpy.cov(y)
[[  4.00000000e+02   2.00000000e+02   0.00000000e+00]
 [  2.00000000e+02   1.00000000e+02   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   3.33333333e-01]]

4. numpy.mean()

y=[[120,140,160],\
    [50,60,70],\
    [1,0,1]]
ymean_colomn=mean(y,0)#每列计算均值
ymean_row=mean(y,1)#每行计算均值

5.数组的特征信息

先假设已经存在一个N维数组X了,那么可以得到X的一些属性,这些属性可以在输入X和一个.之后,按tab键查看提示。这里明显看到了Python面向对象的特征。

import numpy as np
X.flags    #数组的存储情况信息。
X.shape    #结果是一个tuple,返回本数组的行数、列数、……
X.ndim   #数组的维数,结果是一个数
X.size    #数组中元素的数量
X.itemsize    #数组中的数据项的所占内存空间大小
X.dtype    #数据类型
X.T   #如果X是矩阵,发挥的是X的转置矩阵
X.trace()    #计算X的迹
np.linalg.det(a)   #返回的是矩阵a的行列式
np.linalg.norm(a,ord=None)    #计算矩阵a的范数
np.linalg.eig(a)    #矩阵a的特征值和特征向量
np.linalg.cond(a,p=None)    #矩阵a的条件数
np.linalg.inv(a)    #矩阵a的逆矩阵
np.linalg.pinv(a)    #矩阵a的伪逆矩阵

6.多维数组的存取

原文

  • 创建一个一维数组
  • from numpy import *
    a=arrange(36)
    print a
    print type(a)
    
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
     25 26 27 28 29 30 31 32 33 34 35]
    <type 'numpy.ndarray'>

  • 将一维数组组织成二维数组
  • b=a.reshape(6,6)
    print b
    [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]
     [18 19 20 21 22 23]
     [24 25 26 27 28 29]
     [30 31 32 33 34 35]]

  • 使用切片
  • #使用切片来读取第一行中的第二和第三个数,我们看下标[0,2:4],其中逗号前的数字表示第0轴下标取值范围,逗号之后表示第1维下标取值范围,2:4就表示[2-4)之间,左闭右开
    c=b[0,2:4]
    print c

  • 返回一个二维数组
  • d=b[2:4,2:4]
    print d
    [[2 3]
     [8 9]]

  • 只取特定列元素
  • e=b[:,3]
    print e
    [ 3  9 15 21 27 33] #把一列变成一维行向量了
    e=b[:,3:4]
    print e
    [[ 3]
     [ 9]
     [15]
     [21]
     [27]
     [33]]      #6*1的矩阵

  • 设置步长
  • f=b[:,::2]
    print f
    [[ 0  2  4]
     [ 6  8 10]
     [12 14 16]
     [18 20 22]
     [24 26 28]
     [30 32 34]]
     f=b[::2,::2]
     print f
     [[ 0  2  4]
     [12 14 16]
     [24 26 28]]

    7.获取方阵对角线元素

    from numpy import *
    x=arange(10,19).reshape(3,3)
    diag(x)

    8.sum()函数

    from numpy import *
    a=array([[1,2,3],[4,5,6],[7,8,9]])
    print a.sum()  #45 每个元素都相加
    print a.sum(axis=0) #[12,15,18]  按列相加
    print a.sum(axis=1)  #[ 6 15 24]  按行相加

    9.构造矩阵

    import numpy as np
    print np.zeros((3,4))
    [[ 0.  0.  0.  0.]
     [ 0.  0.  0.  0.]
     [ 0.  0.  0.  0.]]
    print np.ones((3,4))
    [[ 1.  1.  1.  1.]
     [ 1.  1.  1.  1.]
     [ 1.  1.  1.  1.]]
    print np.eye(3)
    [[ 1.  0.  0.]
     [ 0.  1.  0.]
     [ 0.  0.  1.]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值