我有一个形状为(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个元素。一个更好的方法来考虑删除最后一个,是把它看作是保留前一半。