参数必须是字符串,类似字节的对象或数字,而不是“切片”

时间:2019-03-25 13:06:58

标签: python numpy slice

我在从numpy数组中删除切片时遇到麻烦。

x_train[:,:,0] 

返回我要删除的数据

但是

np.delete(x_train, np.s_[:,:,0])

引发异常 TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'slice'

但是在文档中是书面的

  

返回一个新的数组,该数组具有沿轴删除的子数组。对于一维数组,这将返回arr [obj]未返回的那些条目。

     

obj:切片,整数或整数数组

     

指示要删除的子阵列。

3 个答案:

答案 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])