乘以1d数组x 2d数组python

时间:2012-07-12 21:15:39

标签: python numpy

我有一个2d数组和一个1d数组,我需要将1d数组中的每个元素乘以2d数组列中的每个元素。它基本上是一个矩阵乘法,但由于1d数组,numpy不允许矩阵乘法。这是因为矩阵本身就是2d的numpy。我怎样才能解决这个问题?这是我想要的一个例子:

FrMtx = np.zeros(shape=(24,24)) #2d array
elem = np.zeros(24, dtype=float) #1d array
Result = np.zeros(shape=(24,24), dtype=float) #2d array to store results

some_loop to increment i:
    some_other_loop to increment j:
        Result[i][j] = (FrMtx[i][j] x elem[j])

许多努力给了我arrays used as indices must be of integer or boolean type

等错误

2 个答案:

答案 0 :(得分:3)

由于NumPy广播规则,一个简单的

Result = FrMtx * elem

会给出理想的结果。

答案 1 :(得分:0)

你应该能够将你的数组相乘,但由于矩阵是方形的,因此数组将被乘以的“方向”并不是很明显。为了更明确地说明哪些轴正在相乘,我发现总是将具有相同维数的数组相乘是有帮助的。

例如,要将列相乘:

mtx = np.zeros(shape=(5,7))
col = np.zeros(shape=(5,))
result = mtx * col.reshape((5, 1))  

通过将col重塑为(5,1),我们保证mtx的轴0与col的轴0相乘。要乘以行:

mtx = np.zeros(shape=(5,7))
row = np.zeros(shape=(7,))
result = mtx * row.reshape((1, 7))

这可以保证mtx中的轴1乘以行中的轴0。