从矢量创建3D张量

时间:2020-04-03 08:21:32

标签: python numpy tensor

我有一个向量

In [26]: x                                                                      
Out[26]: array([1, 2])

我有一个形状为a的3D张量(10,2,30),其内容为True,False。我必须将每个a[i,:,:]乘以x[i]。 我以为numpy.tile是可行的。

有没有避免for循环的方法?

1 个答案:

答案 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。