繁体   English   中英

如何从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM