编程语言
首页 > 编程语言> > python-IndexError:数组的索引过多.具有42个特征的块状数组不均一

python-IndexError:数组的索引过多.具有42个特征的块状数组不均一

作者:互联网

我正在尝试实例化测试集进行分类,加载具有41个特征和1个标签的数据集:

import numpy as np

f = open("mydataset")
dataset = np.genfromtxt(f, delimiter=',', dtype=None)

X = dataset[:, 0:40]  # select columns 1 through 41
y = dataset[:, 41]  # select column 42 (the labels)

由于mydataset不是同质的(并非所有元素都具有相同的类型),因此genfromtxt函数可创建一维数组(元组列表).所以我得到这个错误:

X = dataset[:, 0:40]  # select columns 1 through 41
IndexError: too many indices for array

我该如何解决?我是否要以2D转换numpy数组(如果是,以哪种方式)?还是我要使用另一种方法来选择正确的列?

谢谢

解决方法:

您可以定义一个复合dtype:

dt = np.dtype([('values',float,(41,)),('labels','S10')])
data=np.genfromtxt(f, delimiters=',',dtype=dt)
X = data['values']
Y = data['labels']

(未经测试,因为我没有此大小的样本数组).

正如我在最近的答案https://stackoverflow.com/a/37126091/901925中所述,

您可以使用以下方式将dtype = None数据转换为此复合dtype

data.view(dt)

尽管这要求所有数字都以浮点数(或全部以整数)的形式加载. CSV通常包含浮点和整数列,因此None genfromtxt调用的数字字段将是类型的混合.

借用其他答案,一般的结构化数组可能类似于:

In [421]: data=np.array([('label1', 12, 23.2, 232.0), ('label2', 23, 2324.0, 324.0),
       ('label3', 34, 123.0, 2141.0), ('label4', 0, 2.0, 3.0)], 
      dtype=[('f0', '<U10'), ('f1', '<i4'), ('f2', '<f8'), ('f3', '<f8')])

4个具有不同dtypes的字段.

可以通过名称访问单个字段:data [‘f0’]或名称列表data [[‘f0′,’f3’]].但是使用名称列表可以做的事情是有限的.

In [426]: data[['f2','f3']]=10
...
ValueError: multi-field assignment is not supported

如果创建副本,则可以做更多的事情,如果将其视为同类数组,则可以做更多的事情:

In [427]: d23=data[['f2','f3']].copy()

In [428]: d23
Out[428]: 
array([(23.2, 232.0), (2324.0, 324.0), (123.0, 2141.0), (2.0, 3.0)], 
      dtype=[('f2', '<f8'), ('f3', '<f8')])

In [429]: d23=d23.view((float,(2,)))

In [430]: d23
Out[430]: 
array([[  2.32000000e+01,   2.32000000e+02],
       [  2.32400000e+03,   3.24000000e+02],
       [  1.23000000e+02,   2.14100000e+03],
       [  2.00000000e+00,   3.00000000e+00]])

In [431]: d23+=34

In [432]: d23
Out[432]: 
array([[   57.2,   266. ],
       [ 2358. ,   358. ],
       [  157. ,  2175. ],
       [   36. ,    37. ]])

(更改d23不会影响原始数据).

标签:scikit-learn,classification,arrays,python,numpy
来源: https://codeday.me/bug/20191118/2029859.html