操纵一个numpy数组

时间:2016-06-01 13:55:00

标签: python numpy genfromtxt

我目前有一个大约350行和50列的csv文件,其中我想要访问四列。使用genfromtxt,我能够做到这一点。但是,如果我有这些列,我想根据现有列添加新列(即newcol=abs(col1-col2))。但是,当我这样做时,我收到错误:too many indices for array

这是我的代码:

import numpy as np
thedata = np.genfromtxt(
    'match_roughgraphs.csv',
    skip_header=0,
    skip_footer=0,
    delimiter=',',
    usecols=(3,4,29,30),
    names=['hubblera','hubbledec','sloanra','sloandec'])

for row in thedata:
    print(row)

b=np.empty(350,1)
b=np.absolute(thedata[:,0]-thedata[:,1]) #returns too many indices error

print(thedata[0,0]) #also returns too many indices error

print(thedata[0]) #prints out first row

基于上面的最后两行,我尝试了一个测试,我假设genfromtxt()正在加载csv文件,以便所有数据都保存在一列中,用逗号分隔而不是分隔符逗号分隔。有关如何解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:2)

我认为你的代码不起作用的原因是numpy.genfromtxt返回一个tupples或更具体结构的ndarray数组。阅读此numpy.genfromtxt produces array of what looks like tuples, not a 2D array—why? 因此,您可以修复参数或将这些tupple转换为数组,以将thedata作为2D数组。 当您使用name参数时,它返回一个结构化的ndarray,删除此参数,它将返回一个2D数组。 正如您在此处命名的列,您可以执行

b=np.absolute(thedata['hubblera']-thedata['hubbledec'])

同样thedata[0,0]这会返回错误,因为没有2D数组尝试执行thedata[0][0]