In [553]: A
Out[553]:
matrix([[2, 3],
[4, 5]])
In [554]: B
Out[554]:
matrix([[12, 13],
[14, 15]])
In [555]: arrA = np.asarray(A)
In [556]: arrB = np.asarray(B)
In [557]: np.asmatrix((arrA[...,None]*arrB[:,None]).reshape(A.shape[0],-1))
Out[557]:
matrix([[24, 26, 36, 39],
[56, 60, 70, 75]])
我希望有更好的方法来完成第三步,但是上面的方法是有效的。在
我们可以使用^{} 作为矢量化的解决方案-
哲学:在矢量化/广播语言方面,我将其描述为扩展或将输入数组的第二维度相互对立,同时保持其第一维度对齐。这种扩展是通过为这两个输入引入带有^{} 的新轴,然后简单地相互相乘来完成的。在
数学视图:让我们借助一个通用的示例,使用一个更为数学化的视图。考虑具有不同列数的输入数组-
^{pr2}$首先,扩展尺寸并检查其形状-
现在,执行元素级乘法,它将以广播方式执行这些乘法。仔细看看输出的形状-
因此,使用
None/np.newaxis
引入的单粒子维数(长度为1的维)将是在相乘之前相应数组的元素将在引擎盖下广播的那些维度。这种引擎盖下的广播与相应的操作(在这种情况下是乘法)以非常有效的方式进行。在最后,我们将这个
3D
数组重塑为2D
,保持与原始输入相同的行数。在样本运行:
NumPy matrix
输入类型对于^{} 作为输入,我们可以使用^{} 来简单地为输入创建视图。使用这些视图,将执行广播的元素级乘法,最终在整形之后生成一个
2D
数组。{cd10>转换为最后一步。让我们使用相同的示例输入来演示实现-相关问题 更多 >
编程相关推荐