将ndarray保存到文本文件时出现问题

时间:2014-03-16 20:31:11

标签: python numpy multidimensional-array

我有一组数据格式如下:

名称q1 q2 q3
ER_1 0 0 0

ER_2 0 0 0

我编写了一个代码,通过读取此数据表进行计算,然后如果特定计算涉及ex:ER_1中提到的名称之一,则q1,q2和q3将更新。我能够这样做并修改表格,除了我以相同的格式保存它有困难。这是我的尝试,结果是一个txt文件,其中所有元素都在一行中,即:name,q1,q2,q3,ER_1,0,0,0,ER_2,0,0,0

data=numpy.loadtxt('table.txt', dtype=str,usecols=(0,1,2,3,4))#,unpack=True)

NAME='ER_1'

lst=[0,1,2]

for i in lst:
    if NAME in data[i][0]:
        data[i][1] = '27'


data.tofile('newdata.txt',sep=',')

the image relates to the first suggestion given

请求的代码:

所以你需要制作一个名为 - massout.txt的文本文件,如下所示:

Source   M_ratio  R_ratio   B_ratio   F_tot F_red   F_blue  c3
ER_1     0           0      0         0       0        0     0 
ER_2     0           0      0         0       0        0     0     

然后只需复制并运行它:

massout=numpy.loadtxt('massout.txt', dtype=str,usecols=(0,1,2,3,4,5,6,7))#,unpack=True)
source='ER_1'

lst=[0,1,2]

for i in lst:
    if source in massout[i][0]:
        massout[i][1] = '27'


numpy.savetxt('newdata.txt', massout, delimiter='', fmt='%s\n'  )

1 个答案:

答案 0 :(得分:1)

tofile方法将数据写成“扁平化”。它将元素按顺序写入文件,丢失有关数组的任何形状信息。

您对函数numpy.savetxt的使用需要进行一些调整。要使用空格分隔字段,请使用delimiter=' '(这是空格字符,而不是空字符串)。不要在'\n'参数中包含fmt。以下适用于我:

numpy.savetxt('newdata.txt', massout, delimiter=' ', fmt='%s')

P.S。使用2-d numpy数组,将数组索引为massout[i, j]而不是massout[i][j]更有效且更具风格。也就是说,你应该写

    massout[i, 1] = '27'

而不是

    massout[i][1] = '27'