Python 乘法元素数组与矩形矩阵

Python 乘法元素数组与矩形矩阵,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我想将一个形状数组(10,)和一个形状矩阵(10,20)元素相乘,基本上是将每个列乘以数组 但是我有 ValueError:操作数无法与形状(20,)(20,10)一起广播。 当我使用(10,10)矩阵和(10,)数组时,它确实有效 我不希望使用for循环来优化我的算法所花费的时间。(这个数组/矩阵运算在许多其他循环中都非常深入)如果你想将2个矩阵相乘,它们必须在数学和程序中有一个顺序 A => a x n B => n x b 你得到的C=axb将被成形C=>axb 所以你的第

我想将一个形状数组(10,)和一个形状矩阵(10,20)元素相乘,基本上是将每个列乘以数组

但是我有

ValueError:操作数无法与形状(20,)(20,10)一起广播。

当我使用(10,10)矩阵和(10,)数组时,它确实有效


我不希望使用
for
循环来优化我的算法所花费的时间。(这个数组/矩阵运算在许多其他循环中都非常深入)

如果你想将2个矩阵相乘,它们必须在数学和程序中有一个顺序

A => a x n 
B => n x b
你得到的
C=axb
将被成形
C=>axb

所以你的第一个数组必须是(1,10)乘以一个矩阵(10,20),你将得到一个数组(1,20)


要做到这一点,您可以使用第一个数组

如果您想将2个矩阵相乘,它们必须在数学和程序中具有顺序

A => a x n 
B => n x b
你得到的
C=axb
将被成形
C=>axb

所以你的第一个数组必须是(1,10)乘以一个矩阵(10,20),你将得到一个数组(1,20)


要做到这一点,您可以创建第一个阵列

广播的第一条规则是,尺寸最少的阵列将被展开,而展开发生在阵列的前端

在(10,)*(10,20)的情况下,有2个dim,因此第一个扩展为(1,10)。但这不能改变为匹配(10,20)

因此,您需要显式地将(10,)更改为(10,1)。使用
None
最简单的方法

x[:,None]*y
注意,在MATLAB中,扩展发生在另一端。但我不确定MATLAB是否有广播功能。Octave是几年前加的

================

在(10,)*(10,10)情况下,=>(1,10)*(10,10)=>(10,10)


不同的结果。

广播的第一条规则是,维度最少的阵列会被扩展,而扩展发生在阵列的前端

在(10,)*(10,20)的情况下,有2个dim,因此第一个扩展为(1,10)。但这不能改变为匹配(10,20)

因此,您需要显式地将(10,)更改为(10,1)。使用
None
最简单的方法

x[:,None]*y
注意,在MATLAB中,扩展发生在另一端。但我不确定MATLAB是否有广播功能。Octave是几年前加的

================

在(10,)*(10,10)情况下,=>(1,10)*(10,10)=>(10,10)


不同的结果。

Do
arr1[:,None]*arr2
。要使广播工作,必须使用形状(10,)至(10,1)对阵列进行重塑。Divakar的建议行得通。执行
arr1[:,None]*arr2
。要使广播工作,您必须使用形状(10,)到(10,1)对阵列进行重塑。Divakar的建议行得通。你描述的是矩阵乘法,而不是元素乘法。你描述的是矩阵乘法,而不是元素乘法。