【问题标题】:Deleting slices from numpy array given a condition给定条件从numpy数组中删除切片
【发布时间】:2021-07-05 13:57:23
【问题描述】:

我有一个形状为 (6, 2000, 2) 的 numpy 数组 t_i。 如果该行下方该切片中的所有元素都是-1,我需要从数组中删除列切片。 假设我在 t_i 的第 i 行。现在对于第 i 行下方的那些列,其中列中的每个元素都是 [-1,-1],我需要从 t_i 中删除完整的列切片。

我试过这个:

t_iF = t_i[:, t_i[i+1:] != -1]

但我收到此错误:

IndexError: 数组索引过多:数组是 3 维的,但是 4 被索引了

请大家指出正确的方向吗?谢谢!

更新: 设 t_i 为:

t1=np.arange(32).reshape(4,4,2)
t1[1:,[1,3]] = -1

在这种情况下,需要删除整个 1 和 3 列切片。

【问题讨论】:

  • 请看:t_i[i+1:] != -1。这会给你一个线索。
  • 您的描述不清楚。请添加源数据示例和预期结果。另一个问题是您的代码看起来很像伪代码,例如i 的值未知。
  • @adr, yes t_i[i+1:] != -1 返回一个 3D 张量,而我只需要满足不等式的列索引。你能建议我怎么做吗?谢谢!
  • 我正在尝试添加一个。实际上,我需要通过循环进行此更新(即对 i 的值范围执行此步骤)。所以我在一个范围内变化。谢谢!
  • 定义输入和输出以配合散文。

标签: python arrays numpy


【解决方案1】:

np.any 对以下任务非常有帮助:

import numpy as np

t1 = np.arange(32).reshape(4, 4, 2)
t1[1:, [1, 3]] = -1

t_filtered = t1[:, [np.any(t1[i, i:] != -1) for i in range(t1.shape[0])], :]
print(t_filtered.shape) # (4, 3, 2)

【讨论】:

  • 嗨@Stefan 感谢您的帮助。实际上它的 t1[1:,[1,3]] = -1 所以我们没有将整个列切片设为 -1,而是将切片中特定行下方的所有元素设为 -1。
  • 问题描述还是有些不清楚。不过,我现在已经更新了答案,希望这是您所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多