假设我有一个numpy数组:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
我有一个相应的“矢量:”
vector = np.array([1,2,3])
如何对每行 data
进行减法或除法,结果如下:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
长话短说:如何使用与每行对应的一维标量数组对2D数组的每一行执行操作?
4 回答
JoshAdel的解决方案使用np.newaxis添加维度 . 另一种方法是使用reshape() to align the dimensions in preparation for broadcasting .
执行reshape()允许维度排列为广播:
请注意
data/vector
没问题,但它无法为您提供所需的答案 . 它将array
的每一列(而不是每一行)除以vector
的每个对应元素 . 如果您明确地将vector
重新塑造为1x3
而不是3x1
,那么您将得到的结果 .干得好 . 您只需要将
None
(或者np.newaxis
)与广播结合使用:如前所述,使用
None
或使用np.newaxes
进行切片是一种很好的方法 . 另一种选择是使用转置和广播,如和
对于更高维的数组,您可能需要使用NumPy数组的
swapaxes
方法或NumPyrollaxis
函数 . 确实有很多方法可以做到这一点 .有关广播的更全面解释,请参阅http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
Pythonic的方法是......
这需要重新整形,结果也是浮点格式 . 在其他答案中,结果采用舍入整数格式 .
#NOTE: 数据和向量中的列数不应匹配