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

问题描述 投票:3回答:3

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

x_train[:,:,0] 

返回我要删除的数据

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

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

但是在文档中写了它

返回一个新数组,其子轴数组沿轴被删除。对于一维数组,这将返回arr [obj]未返回的条目。

obj:slice,int或int数组

指示要删除的子数组。

python numpy slice
3个回答
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]]]

3
投票

首先,在这种情况下,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的切片。


0
投票

我认为问题出在你的切片上,而那里却没有。尝试

np.delete(x_train, np.s_[1,1,1])
© www.soinside.com 2019 - 2024. All rights reserved.