我在从numpy数组中删除切片时遇到麻烦。
x_train[:,:,0]
返回我要删除的数据
但是
np.delete(x_train, np.s_[:,:,0])
引发异常 TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'slice'
但是在文档中是书面的
返回一个新的数组,该数组具有沿轴删除的子数组。对于一维数组,这将返回arr [obj]未返回的那些条目。
obj:切片,整数或整数数组
指示要删除的子阵列。
答案 0 :(得分:3)
首先,在这种情况下,np.s_
返回一个元组,而不是一个切片。
在文档中,他们说您可以传递一个slice作为参数,但实际上,它们是指内置在slice
类(Doc)中的python
有效代码为:
x = [[[1,2,3],[4,5,6]],[[1,1,1],[2,2,2]],[[5,5,5],[7,7,7]]]
np.delete(x, slice(1,1,1))
但是让我们看一下np.s_
的输出。
print(np.s_[:,:,0])
返回
(slice(None,None,None), slice(None,None,None), 0)
np.s_
的输出是一个objets元组,有些是切片,有些是索引,您应该阅读np.s_
的文档以获取更多信息,以了解如何使用它。
实际上,切片是允许您编写mylist[0:3]
的对象,实际上,这段代码只是mylist[slice(0,3)]
mylist[:]
是切片的一种特殊情况,实际上:
是从0到len(mylist)-1
的切片。
答案 1 :(得分:2)
您可以尝试以下方法:
arr1 = np.delete(arr1, 0, axis=-1)
进行测试:
import numpy as np
arr1 = np.arange(48).reshape(2,3,8)
print (arr1)
arr1 = np.delete(arr1, 0, axis=-1)
print (arr1)
输出:
# Before delete
[[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23]]
[[24 25 26 27 28 29 30 31]
[32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47]]]
# After delete
[[[ 1 2 3 4 5 6 7]
[ 9 10 11 12 13 14 15]
[17 18 19 20 21 22 23]]
[[25 26 27 28 29 30 31]
[33 34 35 36 37 38 39]
[41 42 43 44 45 46 47]]]
答案 2 :(得分:0)
我认为问题出在您的切片上,该切片在那里不起作用。试试
np.delete(x_train, np.s_[1,1,1])