三维数组处理

时间:2018-06-18 09:03:47

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

我想转

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的行后,我无法将阵列拼接在一起,有人能帮帮我吗? 非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您想要一种更自动的方式处理输入数据,这里有一个使用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)