Numpy 数组就地修改

Numpy array modification 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,所以快速执行会有所帮助。

您的示例中的列索引仅为 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

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