矩阵除以另一个矩阵的行,没有numpy的循环

时间:2015-12-03 14:11:45

标签: python numpy matrix linear-algebra division

如果不使用循环,下面代码的等效numpy实现是什么?

dt = np.dtype(np.float32)

a=[[12,3],
   [2,4],
   [2,4],]

b=[[12,3,2,3],
   [2,4,4,5]]

a=np.asarray(a,dtype=dt)
b=np.asarray(b,dtype=dt)
print(a.shape)
print(b.shape)
ainvb=np.zeros((3,2,4))
for i in range(4):
   ainvb[:,:,i]=a/b[:,i].T

我需要做的是将每行“b”的“a”列分开。最后,将有4个大小为3 * 2的矩阵(大小为“a”),其中每个矩阵都是“a”除以“b”行之一。

是否可以在numpy中没有循环的情况下执行此操作?

1 个答案:

答案 0 :(得分:3)

对于numpy解决方案,通过在数组中插入单例维度来使用数组广播:

 ainvb2=a[:,:,None]/b[None,:,:]

这可以通过将a转换为(3,2,1)b来塑造(1,2,4)来实现。然后它们可以一起广播,单身尺寸将完全符合您的需要。

或者TheBlackCat pointed out,您可以访问"所有剩余的维度"使用a的{​​{1}},并且在广播期间也隐式假设了前导单身尺寸,因此您只需使用

...

与循环解决方案的比较:

ainvb2=a[...,None]/b
相关问题