NEKO

numpy教程

2018/03/11

python2.7
import numpy as np
from numpy.linalg import *

创建一个一维矩阵

b= np.array([1,2,3,4,5,6])

创建全为0的矩阵

b=np.zeros((3,3))这个方法创建的数组元素类型是numpy.float64
b=np.full((3,3),0)这个方法创建的数组元素类型是numpy.int32

创建全为1的矩阵

b=np.ones((3,3))
b=np.full((3,3),1)

创建全为?的矩阵

b=np.full((3,3),?)

创建单位矩阵

单位矩阵:左上角到右下角全为1
b=np.eye(3)

创建等差矩阵

b=np.arange(1,10,2)
2为公差

创建随机矩阵

b=np.random.random((3,3))
但元素范围是0~1
或者
b=np.random.randint(0,21,25).reshape(5,-1)
创建了0-20之间的一个55的矩阵
也可以指定随机数
np.random.choice([1,2,3],10).reshape(2,-1)
创建了一个由1,2,3组成的2
5的矩阵

创键矩阵时设置数据类型

a= np.zeros(5,dtype='int64')

改变矩阵的数据类型

a=np.array(a,dtype=np.int64)

改变数组的维度

将a数组变为2行3列:
a=a.reshape((2,-1))
-1 表示自适应,也可以写3
a=a.reshape((2,3))

获取矩阵元素的类型

print a.dtype

获取矩阵每个元素所占字节

print a.itemsize

获取矩阵元素数目

print a.size

查看矩阵维度

print a.shape

矩阵截取

1
2
3
4
5
6
7
a= np.array([i+1 for i in range(12)]).reshape((3,-1))
print a ->[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]

print a[-2:,1:3]-> [[ 6 7]
[10 11]]

矩阵每个元素加1

a=a+1

矩阵的第0,1,2行的第0列元素加10

1
2
3
a[np.arange(3),0]+=10

a[[0,1,2],0]+=10

矩阵的(0,0),(1,1),(2,2)位置的元素加10

1
2
3
a[np.arange(3),np.arange(3)]+=10

a[[0,1,2],[0,1,2]]+=10

顺序打印矩阵a中大于10的元素

1
print np.sort(a[a>10])

矩阵相加

1
2
3
4
a= np.full((3,3),2)
b= np.full((3,3),3)
c=a+b
c=np.add(a,b)

矩阵相减

1
2
c=a-b
c=np.subtract(a,b)

矩阵对应位置相乘

这里指的是对应位置相乘,并不是线性代数里的矩阵相乘

1
2
3
4
5
6
a= np.array([1,2,3,4]).reshape((2,-1))
b= np.array([1,2,3,4]).reshape((2,-1))
c=a*b
c=np.multiply(a,b)
print c ->[[ 1 4]
[ 9 16]]

矩阵数学相乘

1
2
c=a.dot(b)
c=np.dot(a,b)

矩阵对应位置相除

这里也是对应位置相除

1
2
c=a/b
c=np.divide(a,b)

矩阵的每个元素开方

1
c=np.sqrt(a)

矩阵的每个元素平方

1
c=np.power(a,2)

矩阵所有元素求和

1
np.sum(a)

矩阵每一列求和

1
np.sum(a,axis=0)

矩阵每一行求和

1
np.sum(a,axis=1)

矩阵所有元素和的平均值

1
np.mean(a)

矩阵每一列的元素求和的平均值

1
np.mean(a,axis=0)

矩阵每一行的元素求和的平均值

1
np.mean(a,axis=1)

生成随机int

1
np.random.randint(0,10)

生成随机float

1
np.random.uniform(0,10)

以矩阵为单位复制生成更大的矩阵(tile)

1
2
3
4
5
a=np.array([[1,2],[3,4]])
print np.tile(a,(2,2))->[[1 2 1 2]
[3 4 3 4]
[1 2 1 2]
[3 4 3 4]]

矩阵a的每一行都加上一个一维矩阵

使用for循环的话,当a足够大时,效率低下,应使用tile函数将一维矩阵扩展到和矩阵a相同行数然后相加

1
2
3
a=np.array([np.random.randint(0,20,25)]).reshape((5,5))
b=np.array([1,2,3,4,5])
a+=np.tile(b,(5,1))

然而实际上numpy有种叫广播的机制,直接

1
a=a+b

即可实现上述操作

矩阵转置

矩阵行列转换

1
2
a=a.T
a=a.transpose()

矩阵求逆

print inv(a)

求行列式

print det(a)

求特征值和特征向量

print eig(a)

求解x+2y=5,3x+4y=7

1
2
3
a=np.array([[1,2],[3,4]])
b=np.array([[5],[7]])
print solve(a,b)

原文作者: n3k0

发表日期: March 11th 2018, 2:36:01

发出嘶吼: 没有魔夜2玩我要死了

CATALOG
  1. 1. 创建一个一维矩阵
  2. 2. 创建全为0的矩阵
  3. 3. 创建全为1的矩阵
  4. 4. 创建全为?的矩阵
  5. 5. 创建单位矩阵
  6. 6. 创建等差矩阵
  7. 7. 创建随机矩阵
  8. 8. 创键矩阵时设置数据类型
  9. 9. 改变矩阵的数据类型
  10. 10. 改变数组的维度
  11. 11. 获取矩阵元素的类型
  12. 12. 获取矩阵每个元素所占字节
  13. 13. 获取矩阵元素数目
  14. 14. 查看矩阵维度
  15. 15. 矩阵截取
  16. 16. 矩阵每个元素加1
  17. 17. 矩阵的第0,1,2行的第0列元素加10
  18. 18. 矩阵的(0,0),(1,1),(2,2)位置的元素加10
  19. 19. 顺序打印矩阵a中大于10的元素
  20. 20. 矩阵相加
  21. 21. 矩阵相减
  22. 22. 矩阵对应位置相乘
  23. 23. 矩阵数学相乘
  24. 24. 矩阵对应位置相除
  25. 25. 矩阵的每个元素开方
  26. 26. 矩阵的每个元素平方
  27. 27. 矩阵所有元素求和
  28. 28. 矩阵每一列求和
  29. 29. 矩阵每一行求和
  30. 30. 矩阵所有元素和的平均值
  31. 31. 矩阵每一列的元素求和的平均值
  32. 32. 矩阵每一行的元素求和的平均值
  33. 33. 生成随机int
  34. 34. 生成随机float
  35. 35. 以矩阵为单位复制生成更大的矩阵(tile)
  36. 36. 矩阵a的每一行都加上一个一维矩阵
  37. 37. 矩阵转置
  38. 38. 矩阵求逆
  39. 39. 求行列式
  40. 40. 求特征值和特征向量
  41. 41. 求解x+2y=5,3x+4y=7