【问题标题】:Writing an ASCII file from a 2D numpy array从 2D numpy 数组写入 ASCII 文件
【发布时间】:2014-09-12 14:54:56
【问题描述】:

我有一个 2D numpy 数组。我想用它制作一个 ASCII 文件。这是我使用的代码,其中a3 是 numpy 数组

f = open('ASCIIout.asc', 'w')
numpy.savetxt(ASCIIout, a3)
f.write("ncols " + str(ncols) + "\n")
f.write("nrows " + str(nrows) + "\n")
f.write("xllcorner " + str(xllcorner) + "\n")
f.write("yllcorner " + str(yllcorner) + "\n")
f.write("cellsize " + str(cellsize) + "\n")
f.write("NODATA_value " + str(noDATA) + "\n")
f.close()

现在我用附加选项打开它并写入二维数组值:

f_handle = open(ASCIIout, 'a')
numpy.savetxt(f_handle, MyArray, fmt="%.3f")
f_handle.close()

但是,我有几个问题。首先,fmt 真的不起作用我得到这样的值:

9.999000000000000000e+03 

如果我只使用代码行下面的代码,我会得到-9999.000 1.345,但是,我没有将 ncols、nrows 等附加到 ASCII 文件中。

numpy.savetxt(f_handle, MyArray, fmt="%.3f")

我的数据范围从0到6。我真正想得到的是:

-9999 1.345 -9999 3.21 0.13 -9999

我在-9999 之后没有得到小数,而在1.345 等真实数据之后得到小数我在 R 中制作了 ASCII 文件,我想知道在 Python 中应该有一种简单的方法。提前感谢您的帮助。

【问题讨论】:

  • 在第一个代码块中,numpy.savetxt(ASCIIout, a3) 做了什么?你还没有告诉我们ASCIIout 中有什么(只是字符串“ASCIIout.asc”吗?),你还没有告诉我们 a3 中有什么。
  • 你为什么不使用header选项来numpy.savetxt
  • @frank128791 a3 是 numpy 数组,ASCIIout 只是我要写入的文件的名称。

标签: python arrays file numpy ascii


【解决方案1】:

如果您的意图是让“停止值”-9999 出现不带小数点,您可以让savetxt()"%.3f" 格式保存所有值,并将您不想要的一个结果替换为你想要的那个:

from StringIO import StringIO
import numpy as np
f = StringIO()
x = np.array(( -9999, 1.345, -9999, 3.21, 0.13, -9999), dtype=float)
np.savetxt(f, x, fmt='%.3f')
f.seek(0)
fs = f.read().replace('-9999.000', '-9999', -1)
f.close()
f = open('ASCIIout.asc', 'w')
f.write("ncols " + str(ncols) + "\n")
f.write("nrows " + str(nrows) + "\n")
f.write("xllcorner " + str(xllcorner) + "\n")
f.write("yllcorner " + str(yllcorner) + "\n")
f.write("cellsize " + str(cellsize) + "\n")
f.write("NODATA_value " + str(noDATA) + "\n")
f.write(fs)
f.close()

如果您想要所有表示不带小数的整数值,.replace('.000', '', -1) 可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 2020-07-31
    • 2017-09-23
    • 2021-02-25
    • 1970-01-01
    • 2023-03-31
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多