Умножить массив 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 в строке.

Другие вопросы по тегам