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.]]

    你可能感兴趣的:(python,numpy)