【问题标题】:Numpy array modification in-placeNumpy 数组就地修改
【发布时间】:2017-04-29 01:58:29
【问题描述】:

我有一个如下所示的文件:

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

【问题讨论】:

  • 您是否尝试打印结果以查看它在哪里?这就是 Python 的交互式控制台的用途。如果它很大,您可以使用ic[:<number>] 打印几行。

标签: arrays python-2.7 numpy in-place


【解决方案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

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

【讨论】:

  • 效果很好。我更正了主帖中的索引。我是一个 FORTRAN 的老程序员,Python 0-indexing 还是让我承认了。
猜你喜欢
  • 2022-10-12
  • 2014-10-29
  • 2011-05-05
  • 2019-03-18
  • 2019-02-20
  • 2018-07-25
  • 1970-01-01
  • 2011-10-13
  • 2017-10-04
相关资源
最近更新 更多