我有一个向量
In [26]: x
Out[26]: array([1, 2])
我有一个形状为a
的3D张量(10,2,30)
,其内容为True,False
。我必须将每个a[i,:,:]
乘以x[i]
。
我以为numpy.tile
是可行的。
有没有避免for循环的方法?
答案 0 :(得分:0)
编辑:使解决方案更好,第一个解决方案使用了一些不必要的转置。
对于这种操作,np.tensordot和np.einsum可以成为您的朋友。它们可能很难适应,所以我是这样做的:(请注意,在numpy中对数组进行转置和重塑非常快,它们只需要更改numpy的 strides 即可。数组,因此花费的时间不会随数据集的大小而增加,您可以here进行阅读。
a = np.array([0,10])
b = np.arange(600).reshape(10,2,30)
#making a same dimention as b
a = a.reshape((1,2,1))
c = a*b
我们要沿某个轴乘以a和b,因此我们对a进行整形以使数组沿该轴匹配,然后将它们相乘。
执行此操作的方法很可能更优雅,但它确实有效,并且速度非常快(如果a的长度为20而b为形状(100、20、300),则为0.004s。