在numpy中用不同形状的矩阵进行求和和乘法运算

时间:2014-05-07 10:28:29

标签: python numpy

我有一个N * M矩阵A和一个N长度向量V.我想做A + V,其中A的行i中的每个元素与V中的元素i相加。怎么做?< / p>

e.g:

A = np.random.rand(3,2)
V = np.array([1,2,3])
A + V

ValueError: operands could not be broadcast together with shapes (3,2) (3) 

我想用乘法和除法做同样的事。

3 个答案:

答案 0 :(得分:1)

解决方案:

V = V.reshape(-1,1)
A + V

现在可行了

答案 1 :(得分:0)

这里要查找的概念是broadcasting。它使您能够在任何两个矩阵之间进行逐点交互,只要它们的形状对应,或者在没有对应的轴上,至少有一个边是简并的,即大小为1。在您的情况下,您需要将轴添加到V.可以如下优雅地执行此操作

A + V[:, np.newaxis]

答案 2 :(得分:0)

你需要告诉numpy它必须将向量V的维度扩展为1,你可以使用特殊索引np.newaxis来完成它。它看起来像这样:

import numpy as np

A = np.array([[10,20],[100,200],[1000,2000]])
V = np.array([1,2,3])
A + V[:,np.newaxis]

array([[  11,   21],
       [ 102,  202],
       [1003, 2003]])

来自slicing docs

  

选择元组中的每个newaxis对象用于将结果选择的维度扩展一个单位长度维度。添加的维度是newaxis对象在选择元组中的位置。