【问题标题】:Three-dimensional array processing三维数组处理
【发布时间】:2018-11-27 02:14:00
【问题描述】:

我想转

arr = np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]], [[2,2,2],[4,5,6],[7,8,9],[10,11,12]], [[3,3,3],[4,5,6],[7,8,9],[10,11,12]]])

进入

arr = np.array([[[1,2,3],[7,8,9],[10,11,12]], [[2,2,2],[7,8,9],[10,11,12]], [[3,3,3],[7,8,9],[10,11,12]]])

下面是代码:

a = 0
b = 0
NewArr = []
while a < 3:
    c = arr[a, :, :]
    d = arr[a]
    print(d)
    if c[1, 2] == 6:
         c = np.delete(c, [1], axis=0)
    a += 1
    b += 1

    c = np.concatenate((d, c), axis=1)

    print(c)

但是删除包含数字6的行后,我无法将数组拼接在一起,有人可以帮帮我吗? 非常感谢您的帮助。

【问题讨论】:

  • cannot stitch the array together - 这不是很清楚。如果您在 concatenate 表达式中遇到错误,请告诉我们它是什么。我怀疑使用delete 你正在改变c 的形状,因此它不再与d 的形状兼容——至少对于所选轴不兼容。你知道形状必须如何匹配才能使用concatenate吗?
  • 您的样本arr 不包含6

标签: python-3.x numpy deep-learning


【解决方案1】:

如果您想要一种更自动化的方式来处理您的输入数据,这里有一个使用 numpy 函数的答案:

arr[np.newaxis,~np.any(arr==6,axis=2)].reshape((3,-1,3))

np.any(arr==6,axis=2) 输出一个数组,该数组在包含值 6 的行处为 True。我们取这些布尔值的倒数,因为我们想要删除这些行。然后将该解决方案用作 arr 中的索引选择,使用 np.newaxis,因为 np.any 的输出比原始数组少一个轴。

最后,输出被重新整形为 3,x,3 数组,其中 x 将取决于被删除的行数(因此在整形中为 -1)

【讨论】:

    【解决方案2】:

    根据您提供的输入/输出,更简单的解决方案是仅使用索引选择和切片:

    import numpy as np
    
    arr = np.array([[[1,2,3],[4,5,6],[7,8,9],[10,11,12]], [[2,2,2],[4,5,6],[7,8,9],[10,11,12]], [[3,3,3],[4,5,6],[7,8,9],[10,11,12]]])
    print("arr=")
    print(arr)
    
    expected_result = np.array([[[1,2,3],[7,8,9],[10,11,12]], [[2,2,2],[7,8,9],[10,11,12]], [[3,3,3],[7,8,9],[10,11,12]]])
    
    # select indices 0, 2 and 3 from dimension 2
    a = np.copy(arr[:,[0,2,3],:])
    print("a=")
    print(a)
    
    print(np.array_equal(a, expected_result))
    

    输出:

    arr=
    [[[ 1  2  3]
      [ 4  5  6]
      [ 7  8  9]
      [10 11 12]]
    
     [[ 2  2  2]
      [ 4  5  6]
      [ 7  8  9]
      [10 11 12]]
    
     [[ 3  3  3]
      [ 4  5  6]
      [ 7  8  9]
      [10 11 12]]]
    a=
    [[[ 1  2  3]
      [ 7  8  9]
      [10 11 12]]
    
     [[ 2  2  2]
      [ 7  8  9]
      [10 11 12]]
    
     [[ 3  3  3]
      [ 7  8  9]
      [10 11 12]]]
    True
    

    【讨论】:

    • 我认为 OP 正在寻找一个答案,其中要删除的行的索引未知。相反,他希望删除包含特定数值(本例中为 6)的行。
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多