[英]How should I subtract two vectors or matrices from each other without NumPy?
[英]How to subtract from columns and not rows in NumPy matrices?
我有一个矩阵X
:
[[ 2. nan nan nan]
[ 3. 2. nan nan]
[ nan 5. 5. nan]
[ nan nan nan nan]]
和清单b
:
[-1.0, 2.0, 0.5, -2.0]
当我做X - b
我得到:
[[ 3. nan nan nan]
[ 4. 0. nan nan]
[ nan 3. 4.5 nan]
[ nan nan nan nan]]
如果我想跨列而不是行减去b
怎么办。
我正在寻找类似X - b.transpose()
东西:
[[ 3. nan nan nan]
[ 1. 0. nan nan]
[ nan 4.5 4.5 nan]
[ nan nan nan nan]]
使用numpy.vstack函数的解决方案(垂直堆叠数组):
a = np.array([[ 2.0, np.NaN, np.NaN, np.NaN],
[ 3.0, 2.0, np.NaN, np.NaN],
[ np.NaN, 5.0, 5.0, np.NaN],
[ np.NaN, np.NaN, np.NaN, np.NaN]])
b = np.array([-1.0, 2.0, 0.5, -2.0])
print(a - np.vstack(b))
输出:
[[ 3. nan nan nan]
[ 1. 0. nan nan]
[ nan 4.5 4.5 nan]
[ nan nan nan nan]]
这是一个值得指出的陷阱:
>>> a = np.identity(4)
>>> a
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
>>> b = [1,2,3,4]
>>> a-b
array([[ 0., -2., -3., -4.],
[-1., -1., -3., -4.],
[-1., -2., -2., -4.],
[-1., -2., -3., -3.]])
>>> a-np.matrix(b)
matrix([[ 0., -2., -3., -4.],
[-1., -1., -3., -4.],
[-1., -2., -2., -4.],
[-1., -2., -3., -3.]])
>>> a-np.array(b)
array([[ 0., -2., -3., -4.],
[-1., -1., -3., -4.],
[-1., -2., -2., -4.],
[-1., -2., -3., -3.]])
>>> a-np.matrix(b).T # T is short for transpose()
matrix([[ 0., -1., -1., -1.],
[-2., -1., -2., -2.],
[-3., -3., -2., -3.],
[-4., -4., -4., -3.]])
>>> # BUT:
... a-np.array(b).T
array([[ 0., -2., -3., -4.],
[-1., -1., -3., -4.],
[-1., -2., -2., -4.],
[-1., -2., -3., -3.]])
>>> # with 1d arrays .T does nothing! Use instead
... a-np.array(b)[:, None]
array([[ 0., -1., -1., -1.],
[-2., -1., -2., -2.],
[-3., -3., -2., -3.],
[-4., -4., -4., -3.]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.