Умножить массив 1d x 2d python
У меня есть 2d массив и 1d массив, и мне нужно умножить каждый элемент в 1d массиве х каждого элемента в столбцах 2d массива. По сути, это умножение матриц, но numpy не разрешит умножение матриц из-за массива 1d. Это потому, что матрицы по сути 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 ответа
Из-за правил вещания NumPy, простой
Result = FrMtx * elem
Даст желаемый результат.
Вы должны иметь возможность просто умножать свои массивы вместе, но не сразу очевидно, в каком "направлении" будут умножаться массивы, поскольку матрица квадратная. Чтобы быть более точным в том, какие оси умножаются, я считаю полезным всегда умножать массивы, имеющие одинаковое количество измерений.
Например, чтобы умножить столбцы:
mtx = np.zeros(shape=(5,7))
col = np.zeros(shape=(5,))
result = mtx * col.reshape((5, 1))
Изменяя col в (5,1), мы гарантируем, что ось 0 mtx умножается на ось 0 col. Чтобы умножить строки:
mtx = np.zeros(shape=(5,7))
row = np.zeros(shape=(7,))
result = mtx * row.reshape((1, 7))
Это гарантирует, что ось 1 в mtx умножается на ось 0 в строке.