当我尝试切片时,我收到错误“IndexError:数组的索引太多了。”
我可以打印阵列的每个字段,如下所示:
vector = np.random.choice(data)
print(vector)
vec1 = vector[-1]
print(vec1)
vec2 = vector[1]
print(vec2)
(5.5,2.5,4,1,3,'Iris-versicolor')
虹膜云芝
2.5
当我添加该行时:
vec3 = vector[:-1]
我收到错误:
IndexError:数组索引太多
这可能是什么问题?
//修改
我从iris文件中获取数据
names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']
data = np.genfromtxt('iris.data', delimiter=',', dtype=None, encoding=None, names=names)
我也检查了vecotr的类型
print(type(vector))
class'numpy.void'
答案 0 :(得分:2)
您似乎从NumPy结构化数组或类似内容中提取了单个记录。此记录看起来像一个元组,但它实际上是numpy.void
,numpy.record
或某些相关类型的实例。要将其转换为元组,您可以使用
tup = vector.tolist()
(是的,对于元组来说是tolist()
),然后你可以对结果执行普通的元组操作,包括切片。
答案 1 :(得分:2)
这与@ user2357112:
的解释基本相同In [82]: data = np.array([(5.5, 2.5, 4., 1.3, 'Iris-versicolor')],dtype='f,f,f,f,U20')
In [83]: vector = np.random.choice(data)
In [84]: vector
Out[84]: (5.5, 2.5, 4., 1.3, 'Iris-versicolor')
In [85]: vector[-1]
Out[85]: 'Iris-versicolor'
In [86]: vector[1]
Out[86]: 2.5
In [87]: vector[:-1]
IndexError: too many indices for array
In [88]: vector.dtype
Out[88]: dtype([('f0', '<f4'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4'), ('f4', '<U20')])
In [89]: vector['f2']
Out[89]: 4.0
data
可能包含更多元素,但choice
没有其他参数只返回一个,作为0d数组(vector.shape
)。
通常我们使用字段名称索引结构化数组的字段,但可以按编号访问它们。但是不可能通过切片访问它们。
可以使用item
提取记录,产生tuple
:
In [90]: vector.item()
Out[90]: (5.5, 2.5, 4.0, 1.2999999523162842, 'Iris-versicolor')
In [91]: _[:-1]
Out[91]: (5.5, 2.5, 4.0, 1.2999999523162842)
也可以使用列表访问多个字段:
In [92]: vector.dtype.names
Out[92]: ('f0', 'f1', 'f2', 'f3', 'f4')
In [93]: vector.dtype.names[:-1]
Out[93]: ('f0', 'f1', 'f2', 'f3')
In [95]: vector[list(vector.dtype.names[:-1])]
Out[95]: (5.5, 2.5, 4., 1.3)
但是这个多字段名称代码一直在进行开发,因此详细信息可能因版本而异。