【问题标题】:numpy append slices to two dimensional array to make it three dimensionalnumpy 将切片附加到二维数组以使其成为三维
【发布时间】:2017-04-01 08:07:39
【问题描述】:

我有5 numpy 数组和shape (5,5)。我想要实现的是将这些5 numpy 数组组合成一个形状数组(5,5,5)。我的代码如下所示,但不起作用:

combined = np.empty((0, 5, 5), dtype=np.uint8)

for idx in range(0, 5):
    array = getarray(idx) # returns an array of shape (5,5)
    np.append(combined, img, axis=0)

我想如果我将第一个轴设置为 0,它将附加在该轴上,因此最终形状将是 (5,5,5)。这里有什么问题?

【问题讨论】:

    标签: python arrays numpy multidimensional-array append


    【解决方案1】:

    我会尝试:

    A = np.array([getarray(idx) for idx in range(5)])
    

    或者

    alist = []
    for idx in range(5):
       alist.append(getarray(idx))
    A = np.array(alist)
    

    追加到列表比追加到数组要快。后者创建了一个全新的数组 - 正如您所发现的那样。

    dynamically append N-dimensional array - 同样的问题,从不同的维度开始。

    【讨论】:

    • 我已经回答了我的问题。不过谢谢。你为什么提出另一个答案?你觉得这样更好吗?
    • 是的,我认为它更快。您可以坚持使用 np.append,但请查看它的代码,以便了解它在做什么。并尝试一些简单的时间测试。增量构建数组是一个常见的 SO 问题。
    • 是的,我不需要速度。我只需要完成它。不过还是谢谢!
    • 您介意编辑我的答案并将您的代码添加到其中吗?那我会接受的。因为我认为他们都是正确的。
    【解决方案2】:

    我自己想通了:

    combined = np.empty((0, 5, 5), dtype=np.uint8)
    
    for idx in range(0, 5):
        array = getarray(idx) # returns an array of shape (5,5)
        array array[np.newaxis, :, :]
        combined = np.append(combined, img, axis=0)
    print combined.shape + returns (5,5,5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-06
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多