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
列。
我有一个如下所示的文件:
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
列。