- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实例化我的分类测试集,加载具有 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
我该如何解决这个问题?我是否必须以二维方式转换 numpy 数组(如果是,以哪种方式)?还是我必须使用另一种方法来选择正确的列?
谢谢
最佳答案
你可以定义一个复合数据类型:
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
数据转换为此复合数据类型
data.view(dt)
尽管这要求所有数字都作为 float (或全部作为整数)加载。 CSV 通常混合使用 float 和整数列,因此 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 个不同数据类型的字段。
可以通过名称访问各个字段: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
的更改不会影响原始 data
)。
关于python - IndexError : too many indices for array. 具有 42 个特征的 Numpy 数组不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218031/
我需要在半径R的圆内生成一个均匀随机点。 我意识到,通过在区间 [0 ... 2π) 中选择均匀随机的角度,并在区间 (0 ... R) 中选择均匀随机的半径,我最终会得到更多的点朝向中心,因为对于两
我想在一个正方形内生成 N 个点(均匀地)。我怎样才能做到这一点? 最佳答案 非常酷的问题,比我想象的要困难得多,但这就是想法。有关于 n 边形的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问
考虑以下示例: import itertools import numpy as np a = np.arange(0,5) b = np.arange(0,3) c = np.arange(0,7)
SQL Server 将一组值分成 5 组,每组的 sum(count) 应该均匀分布。 表仅包含 2 列 rid 和 count。 create table t1(rid int, count in
我有以下简单的 HTML。 A B C 和 CSS: ul { width: 100%; display: flex; flex-direction:
我是一名优秀的程序员,十分优秀!