我有一个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
答案 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。