То, что вы получаете, является результатом вещания, которое numpy
реализовано задолго до MATLAB. Даже у Октавы это было до MATLAB.
У вас есть (3,1) и (3,). Ведущий размер добавляется к нижнему затемнению, производя (1,3). Вместе они передают в (3,3) и делают математику.
Если бы вы могли как-то отключить трансляцию (вы не можете), я бы ожидал ошибку несовместимых размеров.
Выхотите получить результат (3,), поэтому вам нужно каким-то образом удалить конечный размер (3,1) - squeeze
, reshape
или [:,0]
index, чтобы сделать это.
В октаве:
>> x1 = [1;2;3]; # (3,1)
>> y1 = [1,2,3]; # (1,3)
>> x1 .* y1 # (3,3)
ans =
1 2 3
2 4 6
3 6 9
Из документов Octave:
Примечание по терминологии: «широковещание» - это термин, популяризируемый числовой средой
Numpy в языке программирования Python. В других языках программирования и средах вещание также может быть известно как двоичное синглтонное расширение (BSX, в MATLAB и источник имени функции 'bsxfun'), recycling (R программирование
язык), множественные данные одной инструкции (SIMD) или репликация .
Включить предупреждение о расширениях Octave:
>> warning ("on","Octave:language-extension")
>> x1 .* y1
warning: performing `product' automatic broadcasting
ans =
1 2 3
2 4 6
3 6 9