0

我有一个二维数组和一个一维数组,我需要将一维数组中的每个元素乘以二维数组列中的每个元素。它基本上是矩阵乘法,但由于一维数组,numpy 不允许矩阵乘法。这是因为矩阵在 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

4

2 回答 2

4

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

Result = FrMtx * elem

会给出想要的结果。

于 2012-07-12T21:20:33.720 回答
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。

于 2012-07-12T21:37:25.980 回答