Numpy数组就地修改

时间:2017-04-29 01:58:29

标签: arrays python-2.7 numpy in-place

我有一个看起来像这样的文件:

row  column  layer value1  value2      
8  454  1  0.000e+0 1.002e+4
8  455  1  0.000e+0 1.001e+4
8  456  1  0.000e+0 1.016e+4
8  457  1  0.000e+0 1.016e+4
.
.
.

我想对最后一列进行一些计算(例如乘以10)并保存(就地或作为新文件)而不更改格式。我知道如何加载它,但我不知道如何继续。我执行以下操作来加载数据:

import numpy as np

ic = np.genfromtxt("file.dat",skip_header=1, usecols=(0,1,2,4), 
                    dtype=None, names = ['row', 'column', 'layer', 'value2'])

文件大概150M,因此快速执行会有所帮助。

1 个答案:

答案 0 :(得分:1)

您的示例的列的索引仅为0到4,因此usecols=(0,1,2,5)会在示例中生成错误。假设usecols=(0,1,2,4)

您可以使用

就地修改数组
for i in range(0,len(ic)):
 ic[i]['value2'] *= 10

并使用

将其保存为制表符分隔的文本
np.savetxt("mul.dat", ic, fmt="%d %d %e %e", delimiter="\t", header=" ".join(ic.dtype.names))
制造

# row column layer value2
8 454 1.000000e+00 1.002000e+05
8 455 1.000000e+00 1.001000e+05
8 456 1.000000e+00 1.016000e+05
8 457 1.000000e+00 1.016000e+05

但如果value1导致它永远不会被读入,您将无法写出usecols(0,1,2,4)列。