gpt4 book ai didi

python - Numpy 搜索和切片 3D 数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:24 25 4
gpt4 key购买 nike

我是 Python 和 Numpy 的新手,正在尝试完成以下任务:

给定的 3D 数组:

arr_3d = [[[1,2,3],[4,5,6],[0,0,0],[0,0,0]],
[[3,2,1],[0,0,0],[0,0,0],[0,0,0]]
[[1,2,3],[4,5,6],[7,8,9],[0,0,0]]]
arr_3d = np.array(arr_3d)
  1. 获取给定 3D 数组中 [0,0,0] 出现的索引。
  2. [0,0,0] 首先出现的位置对给定的 3D 数组进行切片。

换句话说,我试图从给定的 3D 数组中删除填充(在本例中为:[0,0,0])。

这是我尝试过的,

arr_zero = np.zeros(3)
for index in range(0, len(arr_3d)):
rows, cols = np.where(arr_3d[index] == arr_zero)
arr_3d[index] = np.array(arr_3d[0][:rows[0]])

但是这样做,我不断收到以下错误:

Could not broadcast input array from shape ... into shape ...

我期待这样的事情:

[[[1,2,3],[4,5,6]],
[[3,2,1]]
[[1,2,3],[4,5,6],[7,8,9]]]

如有任何帮助,我们将不胜感激。

最佳答案

使用 all() 缩减和 argmax() 获取这些索引的第一次出现,然后将每个 2D 切片从 3D 数组 -

In [106]: idx = (arr_3d == [0,0,0]).all(-1).argmax(-1)

# Output as list of arrays
In [107]: [a[:i] for a,i in zip(arr_3d,idx)]
Out[107]:
[array([[1, 2, 3],
[4, 5, 6]]), array([[3, 2, 1]]), array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])]

# Output as list of lists
In [108]: [a[:i].tolist() for a,i in zip(arr_3d,idx)]
Out[108]: [[[1, 2, 3], [4, 5, 6]], [[3, 2, 1]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]]

关于python - Numpy 搜索和切片 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com