【问题标题】:When trying to remove just one element in a nested numpy array the whole subarray gets deleted当试图删除嵌套 numpy 数组中的一个元素时,整个子数组被删除
【发布时间】:2018-12-02 18:07:06
【问题描述】:

我有一个 3 维 numpy 数组 (temp_X),例如:

[[[23,34,45,56],[34,45,67,78],[23,45,67,78]],

[[12,43,65,43],[23,54,67,87],[12,32,34,43]],

[[43,45,86,23],[23,45,56,23],[12,23,65,34]]]

我想删除每个第三个子数组的第一个元素(突出显示的值)。

下面是我尝试过的代码:

for i in range(len(temp_X)):
    temp_X = np.delete(temp_X[i][(len(temp_X[i]) - 1)], [0])

不知何故,当我运行代码时,除了 3 个值之外,整个数组都被删除了。任何帮助深表感谢。提前谢谢你。

【问题讨论】:

  • 那么,预期的输出将不是一个常规数组,因为您最终会在每个子数组中得到可变数量的元素?
  • 这不是一个“嵌套数组”。这是一个列表的概念。这是一个 3d 数组,形状为 (3,3,4)。您可以切掉一个“列”,但它会影响所有子数组,例如temp_X[:,:,1:](产生 (3,3,3))。
  • @Divakar 是的,在删除部分之后。我打算将每个子阵列(例如:[[23,34,45,56],[34,45,67,78],[45,67,78]] 展平为 [23,34,45,56, 34,45,67,78,45,67,78]) 之后。
  • 您应该重塑(到 2d),然后删除一列。这保持了数组的规则形状。

标签: arrays python-3.x numpy numpy-ndarray


【解决方案1】:

使用a 作为 3D 输入数组,这是一种方法 -

m = np.prod(a.shape[1:])
n = m-a.shape[-1]
out = a.reshape(a.shape[0],-1)[:,np.r_[:n,n+1:m]]

使用布尔索引替代最后一步 -

out = a.reshape(a.shape[0],-1)[:,np.arange(m)!=n]

样本输入、输出-

In [285]: a
Out[285]: 
array([[[23, 34, 45, 56],
        [34, 45, 67, 78],
        [23, 45, 67, 78]],

       [[12, 43, 65, 43],
        [23, 54, 67, 87],
        [12, 32, 34, 43]],

       [[43, 45, 86, 23],
        [23, 45, 56, 23],
        [12, 23, 65, 34]]])

In [286]: out
Out[286]: 
array([[23, 34, 45, 56, 34, 45, 67, 78, 45, 67, 78],
       [12, 43, 65, 43, 23, 54, 67, 87, 32, 34, 43],
       [43, 45, 86, 23, 23, 45, 56, 23, 23, 65, 34]])

这是另一个创建蒙版以沿最后两个轴进行蒙版 -

mask = np.ones(a.shape[-2:],dtype=bool)
mask[-1,0] = 0
out = np.moveaxis(a,0,-1)[mask].T

【讨论】:

    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多