“广播机制:通过扩展实现数组运算”的版本间的差异
第3行: | 第3行: | ||
*注意numpy里数组之间的运算和线性代数中的矩阵运算是不一样的 | *注意numpy里数组之间的运算和线性代数中的矩阵运算是不一样的 | ||
*同纬度和形状的数组之间就是同位置的元素两两匹配运算的结果 | *同纬度和形状的数组之间就是同位置的元素两两匹配运算的结果 | ||
− | + | ||
+ | ---- | ||
import numpy as np | import numpy as np | ||
<br>x = np.array([[1,2,1],[4,5,6]]) | <br>x = np.array([[1,2,1],[4,5,6]]) | ||
<br>y = np.array([[1,2,1],[3,4,5]]) | <br>y = np.array([[1,2,1],[3,4,5]]) | ||
<br>print(x+y) | <br>print(x+y) | ||
− | <br>[[ 2 4 2] | + | <br>>>>>[[ 2 4 2] |
− | <br>[ 7 9 11]] | + | <br>>>>>[ 7 9 11]] |
− | print(x-y) | + | <br>print(x-y) |
− | + | <br>>>>>[[0 0 0] | |
− | + | <br>>>>>[1 1 1]] | |
− | print(x*y) | + | <br>print(x*y) |
− | + | <br>>>>>[[ 1 4 1] | |
− | + | <br>>>>>[12 20 30]] | |
− | + | ---- | |
− | 注意:如果是列和行其中之一有空缺是可以通过复制来运算的。 | + | <br>注意:如果是列和行其中之一有空缺是可以通过复制来运算的。 |
但是蓝本不能有缺或者多,即行和列都不完整。 | 但是蓝本不能有缺或者多,即行和列都不完整。 | ||
== 矩阵数组的创建 == | == 矩阵数组的创建 == | ||
− | + | ---- | |
import numpy as np | import numpy as np | ||
− | a = np.arange(3,10)#默认从3开始到10(不包括10),步长为1 | + | <br>a = np.arange(3,10)#默认从3开始到10(不包括10),步长为1 |
− | print(a) | + | <br>print(a) |
− | + | <br>>>>[3 4 5 6 7 8 9] | |
− | a_ones = np.ones((3,4))#创建3*4的全1矩阵 | + | <br>a_ones = np.ones((3,4))#创建3*4的全1矩阵 |
− | print(a_ones ) | + | <br>print(a_ones ) |
− | + | <br>>>>>[[1. 1. 1. 1.] | |
− | + | <br>>>>>[1. 1. 1. 1.] | |
− | + | <br>>>>>1. 1. 1. 1.]] | |
− | a_zeros = np.zeros((3,4))#创建3*4的全0矩阵 | + | <br>a_zeros = np.zeros((3,4))#创建3*4的全0矩阵 |
− | print(a_zeros ) | + | <br>print(a_zeros ) |
− | + | <br>>>>>[[0. 0. 0. 0.] | |
− | + | <br>>>>>[0. 0. 0. 0.] | |
− | + | <br>>>>>[0. 0. 0. 0.]] | |
− | a_eye = np.eye(3)#创建3阶单位矩阵 | + | <br>a_eye = np.eye(3)#创建3阶单位矩阵 |
− | + | <br>print(a_eye) | |
− | + | <br>>>>>[[1. 0. 0.] | |
− | + | <br>>>>>[0. 1. 0.] | |
− | + | <br>>>>>[0. 0. 1.]] | |
− | + | ---- | |
== 矩阵数组的点乘 —— dot == | == 矩阵数组的点乘 —— dot == | ||
--------------------------------- | --------------------------------- | ||
− | import numpy as np | + | <br>import numpy as np |
− | a = np.array([[1,2,3],[7,6,2]]) | + | <br>a = np.array([[1,2,3],[7,6,2]]) |
− | b = np.array([[1,2],[7,6],[8,2]]) | + | <br>b = np.array([[1,2],[7,6],[8,2]]) |
− | print(a.dot(b)) | + | <br>print(a.dot(b)) |
− | + | <br>>>>>[[39 20] | |
− | + | <br>>>>>[65 54]] | |
− | print(a[0,:].dot(b))#第一行的所有列*b | + | <br>print(a[0,:].dot(b))#第一行的所有列*b |
--------------------------------- | --------------------------------- | ||
第63行: | 第64行: | ||
import numpy as np | import numpy as np | ||
− | a = np.array([[2,3],[6,2]]) | + | <br>a = np.array([[2,3],[6,2]]) |
− | print(np.linalg.det(a)) | + | <br>print(np.linalg.det(a)) |
− | + | <br>>>>-14.000000000000004 | |
--------------------------------- | --------------------------------- |
2020年5月16日 (六) 11:12的版本
Numpy数组的广播机制
- 注意numpy里数组之间的运算和线性代数中的矩阵运算是不一样的
- 同纬度和形状的数组之间就是同位置的元素两两匹配运算的结果
import numpy as np
x = np.array([[1,2,1],[4,5,6]])
y = np.array([[1,2,1],[3,4,5]])
print(x+y)
>>>>[[ 2 4 2]
>>>>[ 7 9 11]]
print(x-y)
>>>>[[0 0 0]
>>>>[1 1 1]]
print(x*y)
>>>>[[ 1 4 1]
>>>>[12 20 30]]
注意:如果是列和行其中之一有空缺是可以通过复制来运算的。
但是蓝本不能有缺或者多,即行和列都不完整。
矩阵数组的创建
import numpy as np
a = np.arange(3,10)#默认从3开始到10(不包括10),步长为1
print(a)
>>>[3 4 5 6 7 8 9]
a_ones = np.ones((3,4))#创建3*4的全1矩阵
print(a_ones )
>>>>[[1. 1. 1. 1.]
>>>>[1. 1. 1. 1.]
>>>>1. 1. 1. 1.]]
a_zeros = np.zeros((3,4))#创建3*4的全0矩阵
print(a_zeros )
>>>>[[0. 0. 0. 0.]
>>>>[0. 0. 0. 0.]
>>>>[0. 0. 0. 0.]]
a_eye = np.eye(3)#创建3阶单位矩阵
print(a_eye)
>>>>[[1. 0. 0.]
>>>>[0. 1. 0.]
>>>>[0. 0. 1.]]
矩阵数组的点乘 —— dot
import numpy as np
a = np.array([[1,2,3],[7,6,2]])
b = np.array([[1,2],[7,6],[8,2]])
print(a.dot(b))
>>>>[[39 20]
>>>>[65 54]]
print(a[0,:].dot(b))#第一行的所有列*b
行列式的叉乘 —— linalg.det
import numpy as np
a = np.array([[2,3],[6,2]])
print(np.linalg.det(a))
>>>-14.000000000000004