1

ndarray我使用从 CSV 文件中获取了 NumPy 记录

data = matplotlib.mlab.csv2rec('./data.csv', delimiter=b',')

数据集的结构如下:

      date,a0,a1,a2,a3, b0, b1, b2, b3,[...], b9
2012-01-01, 1, 2, 3, 4,0.1,0.2,0.3,0.4,[...],0.9

我想(在 SQL 意义上)从数组中选择列b0b9给出结构

 b0, b1, b2, b3,[...], b9
0.1,0.2,0.3,0.4,[...],0.9

问题“如何使用 numpy 数组索引从 2D 数组中选择 2 列以从中选择唯一值? ”是类似的,但按照建议的切片data[:,5:],会抛出IndexError: too many indices记录数组。

4

3 回答 3

1

data[...,0:3]将为您提供第 0 到第 2 列。

data[...,[0,2,3]]将为您提供第 0、2 和 3 列。

问题是您有一个数组数组,而您引用的问题是关于 2D 数组,这略有不同。另请参阅:Numpy Array Column Slicing Produces IndexError: invalid index Exception

于 2013-05-31T15:33:36.777 回答
1

鉴于您有一个记录数组,我认为以下内容将起作用:

data[['b' + str(j) for j in range(10)]]

文档/介绍食谱

于 2013-05-31T17:33:36.397 回答
1

我知道这个问题已经得到解答,但只是想记录一下,因为它是相关的 - 它介于Extracting specific columns in numpy arraySelect Rows from Numpy Rec Array之间(但不完全是How to return a view of several columns in numpy结构化数组),这是我找了一阵子的语法,终于找到了;假设这是数据:

import numpy as np

a = np.array([(1.5, 2.5, (1.0,2.0)), (3.,4.,(4.,5.)), (1.,3.,(2.,6.))],
        dtype=[('x',float), ('y',float), ('value',float,(2,2))])

我想要 SQL 之类的东西SELECT x,value FROM a WHERE y>=3.0——也就是说,只按字段名称选择某些列;并且根据某些标准只有一些行;正确的语法是:

a[['x','value']][a['y']>=3.0]
# [(3.0, [[4.0, 5.0], [4.0, 5.0]]) (1.0, [[2.0, 6.0], [2.0, 6.0]])]

虽然a[a['y']>=3.0]工作正常,但请注意:

>>> print a[a['y']>=3.0]['x','value']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.

...但是,如果添加了额外的括号,例如a[a['y']>=3.0][['x','value']]- 一切似乎又可以工作了。

希望这对某人有帮助,
干杯!

于 2013-12-10T07:51:45.290 回答