【问题标题】:Create 3D Tensor From Vector从向量创建 3D 张量
【发布时间】:2020-07-15 09:05:23
【问题描述】:

我有一个向量

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

我有一个形状为(10,2,30)的3D张量a,它的内容是True,False。我必须将每个a[i,:,:] 乘以x[i]。 我想numpy.tile 但它不起作用。

有办法避免for循环吗?

【问题讨论】:

    标签: python numpy tensor


    【解决方案1】:

    编辑:使解决方案更好,第一个解决方案使用了一些不必要的转置。

    对于这种操作,np.tensordot 和 np.einsum 可以成为你的朋友。他们可能很难习惯,所以我是这样做的:(请注意,在 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.004 秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2017-11-11
      相关资源
      最近更新 更多