从3D数组的行中删除索引



我有一个形状为(9, 100, 7200)的3D数组。我想删除每一行7200个值的后半部分,这样新的形状将是(9, 100, 3600)

我能做些什么来切片数组或删除下半部分的索引?我在想np.delete(arr, [3601:7200], axis=2),但我得到一个无效的语法错误时,使用冒号。

为什么不直接切片呢?

arr = arr[:,:,:3600]

语法错误,因为[3601:7200]不是有效的python。我假设您正在尝试创建一个新的数字数组,作为删除函数的obj参数传递。你可以这样做,比如使用range函数:

np.delete(arr, range(3600,7200), axis=2)

请记住,这不会修改arr,但它会返回一个删除元素的新数组。另外,请注意我使用的是3600而不是3601。

然而,在这样的问题中使用切片通常是更好的做法:

arr[:,:,:3600]

这给出了所需的形状。让我来分析一下。我们正在切片一个三维numpy数组。在里面放一个冒号意味着我们取这个维度上的所有东西。:3600表示取该维度的前3600个元素。一个更好的方法来考虑删除最后一个,是把它看作是保留前一半。