【问题标题】:Stacking a single 2D array into 3D efficiently有效地将单个 2D 阵列堆叠成 3D
【发布时间】:2021-08-21 12:15:27
【问题描述】:

我有一个二维数组,我想将相同版本的数组堆叠到第三个维度中,特别是 axis=1。下面的代码可以完成这项工作,但是对于将大小为 (300,300) 的二维数组堆叠成长度为 300 的第三维数组来说非常慢。

arr_2d = arr_2d.reshape(arr_2d.shape[0],arr_2d.shape[1],1)
arr_3d = np.empty((sampling,sampling,sampling)) # allocate space 
arr_3d = [arr_3d[:,:,i]==arr_2d for i in range(sampling)]

有没有更好、更有效的方法?

【问题讨论】:

  • 虽然repeat 完成了所回答的工作(np.tile 也可以在这里工作)我发现这个问题很不清楚,因为提供的代码没有多大意义。 arr_2dtgrid_2d 有什么区别? sampling 是什么?为什么在最后一行使用布尔相等 ==
  • 很抱歉。我修复了代码,所以它确实有意义。

标签: python arrays numpy multidimensional-array


【解决方案1】:

您可以在添加一个新的三维堆栈后使用 numpy.repeat:

import numpy as np
arr = np.random.rand(300, 300)
# arr.shape => (300, 300)
dup_arr = np.repeat(arr.reshape(*arr.shape, 1), repeats=10, axis=-1)
# dup_arr.shape => (300, 300, 10)

正如@xdurch0 所评论的那样,由于您是沿最后一个维度堆叠副本,因此您也可以使用 numpy.tile:

dup_arr = np.tile(arr.reshape(*arr.shape, 1), reps=10)
# dup_arr.shape => (300, 300, 10)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多