我有两个numpy数组,比如
A: = array([[0, 1],
[2, 3],
[4, 5]])
B = array([[ 6, 7],
[ 8, 9],
[10, 11]])
对于A和B的每一行,分别说Ra和Rb,我想计算转置(Ra)* Rb。因此,对于A和B的给定值,我想要以下答案:
array([[[ 0, 0],
[ 6, 7]],
[[ 16, 18],
[ 24, 27]],
[[ 40, 44],
[ 50, 55]]])
我写了以下代码:
x = np.outer(np.transpose(A[0]), B[0])
for i in range(1,len(A)):
x = np.append(x,np.outer(np.transpose(A[i]), B[i]),axis=0)
有没有更好的方法来完成这项任务。
答案 0 :(得分:3)
您可以将A
和B
的扩展维度与np.newaxis/None
一起使用,为broadcasting
引入类似的矢量化解决方案 -
A[...,None]*B[:,None,:]
说明: np.outer(np.transpose(A[i]), B[i])
基本上在柱状版A[i]
和B[i]
之间进行元素乘法运算。您正在A
中针对B
中的相关行重复此行。请注意,np.transpose()
似乎没有产生任何影响,因为np.outer
会处理预期的元素乘法。
我会用矢量化语言来描述这些步骤,然后像这样实现 -
A
和B
的维度以形成3D
形状,以便我们保持axis=0
对齐并保持为axis=0
那些扩展版本。因此,我们决定最后两个轴。axis=1
推送到其axis=1
版本中的3D
,从而创建单个维度在axis=2
处获取A
的扩展版本。 3D
A
版本axis=1
的最后一个单独维度必须与原始2D
B
版broadcasting
中B
的元素对齐,才能axis=1
1}}发生。因此,axis=2
的扩展版本会将其2D版本中3D
的元素推送到其axis=1
版本中的A[...,None]
,从而为{{1}创建单个维度}}。最后,扩展版本将是:B[:,None,:]
& @Page({
templateUrl: 'build/pages/tabs/tabs.html'
})
export class TabsPage {
constructor(params: NavParams) {
this.params = params;
console.log(this.params); // returns NavParams {data: Object}
// this tells the tabs component which Pages should be each tab's root Page
this.tab1Root = Tab1;
this.tab2Root = Tab2;
this.tab3Root = Tab3;
}
}
,乘以谁会给我们所需的输出。