从numpy数组中删除切片时遇到麻烦。
x_train[:,:,0]
返回我要删除的数据
但
np.delete(x_train, np.s_[:,:,0])
抛出异常TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'slice'
但是在文档中写了它
返回一个新数组,其子轴数组沿轴被删除。对于一维数组,这将返回arr [obj]未返回的条目。
obj:slice,int或int数组
指示要删除的子数组。
你可以试试这个:
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]]]
首先,在这种情况下,np.s_
返回一个元组,而不是一个切片。
在文档中,他们说你可以传递一个切片作为参数,但事实上它们意味着在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
的切片。
我认为问题出在你的切片上,而那里却没有。尝试
np.delete(x_train, np.s_[1,1,1])