为了账号安全,请及时绑定邮箱和手机立即绑定

从记录ndarray选择行范围

从记录ndarray选择行范围

回首忆惘然 2021-03-19 15:15:06
我ndarray使用以下方式从CSV文件中获取了NumPy记录:data = matplotlib.mlab.csv2rec('./data.csv', delimiter=b',')数据集的结构为:      date,a0,a1,a2,a3, b0, b1, b2, b3,[...], b92012-01-01, 1, 2, 3, 4,0.1,0.2,0.3,0.4,[...],0.9我想(在SQL意义上)只选择列b0通过b9从阵列中,使结构 b0, b1, b2, b3,[...], b90.1,0.2,0.3,0.4,[...],0.9
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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

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

问题是您有一个数组数组,而您所引用的问题是关于2D数组的,这个问题略有不同。


查看完整回答
反对 回复 2021-03-29
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我知道这个问题已经解决了,但是只是想记录下来,因为它是相关的-它介于提取numpy数组中的特定列和从Numpy Rec数组中选择行之间(但不完全是如何返回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']]-似乎都可以再次使用。


查看完整回答
反对 回复 2021-03-29
  • 3 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信