天道酬勤,学无止境

使用 numpy.savetxt 和 numpy.loadtxt 写入和读取复数(Writing and reading complex numbers using numpy.savetxt and numpy.loadtxt)

问题

我需要写和读复数。 我想使用numpy.savetxtnumpy.loadtxt来做到这一点。 由于我编写的代码相当大,我创建了一个测试文件来尝试写入和读取复数。

到目前为止,我已经能够使用numpy.savetxt编写复数。 代码如下:

import numpy

d1 = -0.240921619563 - 0.0303165074169j
d2 = -0.340921619563 - 0.0403165074169j
d3 = -0.440921619563 - 0.0503165074169j
d4 = -0.540921619563 - 0.0603165074169j

array = numpy.array([d1, d2, d3, d4])

save = open("test.dat", "w")
numpy.savetxt(save, array.reshape(1, array.shape[0]), newline = "\r\n", fmt = "%.10f")

save.close()

这给出了以下输出:

 (-0.2409216196+-0.0303165074j)  (-0.3409216196+-0.0403165074j)  (-0.4409216196+-0.0503165074j)  (-0.5409216196+-0.0603165074j)

我现在想要做的就是实际读取/加载数据。 我的脚本是:

import numpy

d = numpy.loadtxt("test.dat")

这段代码是不够的,我目前无法加载数据。 我的问题和这个类似。 但是,通过手动将+-替换为-我仍然无法加载数据。 我认为,解决之道在于dtype供选择numpy.loadtxt 。 我一直无法弄清楚。

非常感谢您的帮助!

回答1

谢谢沃伦·韦克瑟! 您建议的链接对我帮助很大。 我现在有两个工作脚本:一个用于使用numpy.savetxt编写复数,另一个用于使用numpy.loadtxt从文件中读取/加载复数。

为了将来参考,下面列出了代码。

写作:

import numpy

d1 = -0.240921619563-0.0303165074169j
d2 = -0.340921619563-0.0403165074169j
d3 = -0.440921619563-0.0503165074169j
d4 = -0.540921619563-0.0603165074169j

array = numpy.array([d1, d2, d3, d4])

save = open("test.dat","w")
numpy.savetxt(save, array.reshape(1, array.shape[0]), newline = "\r\n", fmt = '%.4f%+.4fj '*4)

save.close()

读取/加载:

import numpy

coeffs = numpy.loadtxt("test.dat", dtype = numpy.complex128)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何将多维数组写入文本文件?(How to write a multidimensional array to a text file?)
    问题 在另一个问题中,如果我可以提供遇到问题的阵列,其他用户会提供一些帮助。 但是,我什至无法完成基本的I / O任务,例如将数组写入文件。 谁能解释我需要向文件写入4x11x14 numpy数组的哪种循环? 该数组由四个11 x 14数组组成,所以我应该使用漂亮的换行符对其进行格式化,以使文件读取更加容易。 编辑:所以我已经尝试了numpy.savetxt函数。 奇怪的是,它给出了以下错误: TypeError: float argument required, not numpy.ndarray 我认为这是因为该功能不适用于多维数组? 我希望在一个文件中找到任何解决方案吗? 回答1 如果您想将其写入磁盘,以便以numpy数组的形式轻松读回,请查看numpy.save。 对其进行酸洗也可以,但是对于大型数组而言效率较低(您的不是,因此两者都很好)。 如果您希望它易于阅读,请查看numpy.savetxt。 编辑:所以,对于大于2维的数组,似乎savetxt并不是一个很好的选择...但是只是为了得出所有结论,它是一个完整的结论: 我只是意识到numpy.savetxt在尺寸大于2的numpy.savetxt上阻塞了...这可能是设计使然,因为没有固有定义的方式来指示文本文件中的其他尺寸。 例如,这个(二维数组)可以正常工作 import numpy as np x = np
  • Python数据分析:使用NumPy读写文本文件
    一、使用NumPy读写文本文件 在数据分析中,经常需要从文件中读取数据或将数据写入文件,常用的存储文件的格式有文本文件、CSV格式文件、二进制格式文件和多维数据文件等。 1.将1维或2维数组写入TXT文件或CSV格式文件 在NumPy中,使用savetxt()函数可以将1维或2维数组写入后缀名为txt或csv的文件. 函数格式为: **numpy.savetxt(fname,array,fmt='%.18e',delimiter=None,newline='\n', header='', footer='', comments='# ', encoding=None)** 主要参数: fname:文件、字符串或产生器,可以是.gz 或.bz2 的压缩文件 array:存入文件的数组(一维数组或者二维数组) fmt:写入文件的格式,如:%d,%.2f,%.18e,默认值是%.18e 可选项 delimiter: 分隔符,通常情况是str可选 header:将在文件开头写入的字符串 footer:将在文件尾部写入的字符串 comments: 将附加到header和footer字符串的字符串,以将其标记为注释。 默认值:’#’ encoding:用于编码输出文件的编码。 import numpy as np arr = np.arange(12).reshape(3,4) #fmt缺省取
  • Writing and reading complex numbers using numpy.savetxt and numpy.loadtxt
    I need to write and read complex numbers. I would like to use numpy.savetxt and numpy.loadtxt to do so. Since the code that I have written is rather big I created a test file to try to write and read complex numbers. So far I have been able to write complex numbers using numpy.savetxt. The code is the following: import numpy d1 = -0.240921619563 - 0.0303165074169j d2 = -0.340921619563 - 0.0403165074169j d3 = -0.440921619563 - 0.0503165074169j d4 = -0.540921619563 - 0.0603165074169j array = numpy.array([d1, d2, d3, d4]) save = open("test.dat", "w") numpy.savetxt(save, array.reshape(1, array
  • 与Matlab相比,numpy的csv TOO速度慢(Numpy loading csv TOO slow compared to Matlab)
    问题 我发布了这个问题,因为我想知道我是否做错了什么严重的事情才能获得此结果。 我有一个中等大小的csv文件,我尝试使用numpy加载它。 为了说明,我使用python制作了文件: import timeit import numpy as np my_data = np.random.rand(1500000, 3)*10 np.savetxt('./test.csv', my_data, delimiter=',', fmt='%.2f') 然后,我尝试了两种方法:numpy.genfromtxt,numpy.loadtxt setup_stmt = 'import numpy as np' stmt1 = """\ my_data = np.genfromtxt('./test.csv', delimiter=',') """ stmt2 = """\ my_data = np.loadtxt('./test.csv', delimiter=',') """ t1 = timeit.timeit(stmt=stmt1, setup=setup_stmt, number=3) t2 = timeit.timeit(stmt=stmt2, setup=setup_stmt, number=3) 结果表明t1 = 32.159652940464184,t2 = 52
  • Numpy 从文本文件中读取复数(Numpy read complex numbers from text file)
    问题 我使用 numpy 来保存复数矩阵。 输出文件如下所示: (1.100412357301083777e-02+1.471303433818593742e-02j) (1.511426586599529109e-02+-2.516143258497194335e-03j) (1.084202636262432407e-02+1.438252996657629623e-02j) (1.447620213198375083e-02+4.471111098343749646e-03j) 现在,我尝试使用 numpy data = np.loadtxt('PsiPfree1.out', delimiter='\t', dtype=np.complex128)读取它,但出现以下错误: items = [conv(val) for (conv, val) in zip(converters, vals)] ValueError: complex() arg is a malformed string` 我有什么想法可以让它发挥作用吗? 编辑:我现在也尝试不使用括号使矩阵看起来像这样: 1.100412357301083777e-02+1.471303433818593742e-02j 1.511426586599529109e-02+-2.516143258497194335e-03j 1
  • Python3快速入门(十二)——NumPy
    Python3快速入门(十二)——NumPy 一、NumPy简介 1、NumPy简介 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库。Numpy 是一个运行速度非常快的数学库,内部解除了CPython的GIL,运行效率极好,主要用于数组计算,是大量机器学习框架的基础库,NumPy主要包括如下:(1)强大的N维数组对象 ndarray(2)广播功能函数(3)整合 C/C++/Fortran 代码的工具(4)线性代数、傅里叶变换、随机数生成等功能。NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)组合使用,用于替代 MatLab。 2、NumPy的优缺点 NumPy优点如下:(1)对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多。(2)NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的。(3)NumPy的大部分代码都用C语言写,其底层算法在设计时有优异的性能,使得NumPy比纯Python代码高效。NumPy缺点如下:由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理
  • Python3快速入门(十二)——NumPy
    Python3快速入门(十二)——NumPy 一、NumPy简介 1、NumPy简介 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库。Numpy 是一个运行速度非常快的数学库,内部解除了CPython的GIL(全局解释器锁),运行效率极好,主要用于数组计算,是大量机器学习框架的基础库,NumPy主要包括如下:(1)强大的N维数组对象 ndarray(2)广播功能函数(3)整合 C/C++/Fortran 代码的工具(4)线性代数、傅里叶变换、随机数生成等功能。NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)组合使用,用于替代 MatLab。 2、NumPy的优缺点 NumPy优点如下:(1)对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多。(2)NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的。(3)NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多NumPy缺点如下:由于NumPy使用内存映射文件以达到最优的数据读写性能
  • numpy Loadtxt function seems to be consuming too much memory
    When I load an array using numpy.loadtxt, it seems to take too much memory. E.g. a = numpy.zeros(int(1e6)) causes an increase of about 8MB in memory (using htop, or just 8bytes*1million \approx 8MB). On the other hand, if I save and then load this array numpy.savetxt('a.csv', a) b = numpy.loadtxt('a.csv') my memory usage increases by about 100MB! Again I observed this with htop. This was observed while in the iPython shell, and also while stepping through code using Pdb++. Any idea what's going on here? After reading jozzas's answer, I realized that if I know ahead of time the array size
  • How to save and load an array of complex numbers using numpy.savetxt?
    I want to use numpy.savetxt() to save an array of complex numbers to a text file. Problems: If you save the complex array with the default format string, the imaginary part is discarded. If you use fmt='%s', then numpy.loadtxt() can't load it unless you specify dtype=complex, converters={0: lambda s: complex(s)}. Even then, if there are NaN's in the array, loading still fails. It looks like someone has inquired about this multiple times on the Numpy mailing list and even filed a bug, but has not gotten a response. Before I put something together myself, is there a canonical way to do this?
  • 使用Python将列表写入文件(Writing a list to a file with Python)
    问题 这是将列表写入文件的最干净的方法,因为writelines()不会插入换行符吗? file.writelines(["%s\n" % item for item in list]) 似乎会有一种标准的方法... 回答1 您可以使用循环: with open('your_file.txt', 'w') as f: for item in my_list: f.write("%s\n" % item) 在Python 2中,您也可以使用 with open('your_file.txt', 'w') as f: for item in my_list: print >> f, item 如果您热衷于单个函数调用,请至少删除方括号[] ,以便一次打印一个字符串(一个genexp而不是一个listcomp)-没有理由占用所有实现整个字符串列表所需的内存。 回答2 您将如何处理该文件? 该文件是否存在于人类或具有明确互操作性要求的其他程序中? 如果您只是尝试将列表序列化到磁盘以供同一python应用程序稍后使用,则应该对列表进行腌制。 import pickle with open('outfile', 'wb') as fp: pickle.dump(itemlist, fp) 读回: with open ('outfile', 'rb') as fp: itemlist =
  • 将NumPy数组转储到csv文件中(Dump a NumPy array into a csv file)
    问题 有没有办法将NumPy数组转储到CSV文件中? 我有一个2D NumPy数组,需要以人类可读的格式转储它。 回答1 numpy.savetxt将数组保存到文本文件。 import numpy a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) numpy.savetxt("foo.csv", a, delimiter=",") 回答2 您可以使用pandas 。 它确实需要一些额外的内存,因此并不总是可能的,但是它非常快速且易于使用。 import pandas as pd pd.DataFrame(np_array).to_csv("path/to/file.csv") 如果您不需要标题或索引,请使用to_csv("/path/to/file.csv", header=None, index=None) 回答3 tofile是执行此操作的便捷函数: import numpy as np a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ]) a.tofile('foo.csv',sep=',',format='%10.5f') 手册页有一些有用的注释: 这是用于快速存储阵列数据的便利功能。 有关字节序和精度的信息会丢失,因此对于打算在不同字节序的计算机之间存档数据或传输数据的文件
  • 如何使用python numpy.savetxt将字符串和浮点数写入ASCII文件?(How to use python numpy.savetxt to write strings and float number to an ASCII file?)
    问题 我有一组包含字符串和浮点数的列表,例如: import numpy as num NAMES = num.array(['NAME_1', 'NAME_2', 'NAME_3']) FLOATS = num.array([ 0.5 , 0.2 , 0.3 ]) DAT = num.column_stack((NAMES, FLOATS)) 我想将这两个列表堆叠在一起,然后将它们以列的形式写到文本文件中。 因此,我想使用numpy.savetxt (如果可能)来执行此操作。 num.savetxt('test.txt', DAT, delimiter=" ") 当我这样做时,出现以下错误: >>> num.savetxt('test.txt', DAT, delimiter=" ") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_9597b1f_20120920-py2.7-macosx-10.8-x86_64.egg/numpy/lib/npyio.py", line 1047, in savetxt fh.write(asbytes(format % tuple(row
  • 如何正确保存和加载numpy.array()数据?(How to save and load numpy.array() data properly?)
    问题 我想知道如何正确保存和加载numpy.array数据。 目前,我正在使用numpy.savetxt()方法。 例如,如果我有一个数组markers ,它看起来像这样: 我尝试通过使用以下方式保存它: numpy.savetxt('markers.txt', markers) 在其他脚本中,我尝试打开以前保存的文件: markers = np.fromfile("markers.txt") 这就是我得到的... 首先保存的数据如下所示: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 但是当我使用相同的方法保存刚刚加载的数据时,即 numpy.savetxt()看起来像这样: 1.398043286095131769e-76 1.398043286095288860e-76 1.396426376485745879e-76 1
  • 如何将csv数据文件导入scikit-learn?(How to import csv data file into scikit-learn?)
    问题 根据我的理解,scikit-learn 接受 (n-sample, n-feature) 格式的数据,这是一个二维数组。 假设我有表单中的数据...... Stock prices indicator1 indicator2 2.0 123 1252 1.0 .. .. .. . . . 我如何导入这个? 回答1 这不是 CSV 文件; 这只是一个空格分隔的文件。 假设没有缺失值,您可以轻松地将其加载到名为data的 Numpy 数组中 import numpy as np f = open("filename.txt") f.readline() # skip the header data = np.loadtxt(f) 如果股票价格是要预测(你什么y值,在scikit学习条件),那么你就应该拆分data使用 X = data[:, 1:] # select columns 1 through end y = data[:, 0] # select column 0, the stock price 或者,您也可以使用标准 Python csv 模块来处理这种类型的文件。 回答2 numpy loadtxt 的一个很好的替代方案是 Pandas 的 read_csv。 将数据加载到 Pandas 数据帧中的一大优势是它可以处理混合数据类型
  • 从缺少值的文本文件中读取数据(Reading data from text file with missing values)
    问题 我想从具有许多缺失值的文件中读取数据,如以下示例所示: 1,2,3,4,5 6,,,7,8 ,,9,10,11 我正在使用numpy.loadtxt函数: data = numpy.loadtxt('test.data', delimiter=',') 问题是缺少的值破坏了loadtxt(我得到一个“ ValueError:无法将字符串转换为float:” ,这无疑是因为两个或多个连续的定界符)。 有没有办法使用loadtxt或其他功能自动执行此操作,还是我必须咬一下子弹并手动解析每一行? 回答1 我可能会使用genfromtxt: >>> from numpy import genfromtxt >>> genfromtxt("missing1.dat", delimiter=",") array([[ 1., 2., 3., 4., 5.], [ 6., nan, nan, 7., 8.], [ nan, nan, 9., 10., 11.]]) 然后使用nan做任何事情(将它们更改为某种东西,改用遮罩等),其中一些可以内联完成: >>> genfromtxt("missing1.dat", delimiter=",", filling_values=99) array([[ 1., 2., 3., 4., 5.], [ 6., 99., 99., 7., 8.], [
  • 将NumPy数组内容写入Python中的文件(Write NumPy array contents to a file in Python)
    问题 我有一个要写入文件的NumPy数组 outfile.write(str(myarray)) 但是,我得到的东西看起来像这样: [ 4.275000000e01 2.345000000e01 3.2135000000e-02 ] 我的要求是: 在数组中写入数据(而不是数组大括号[]) 用一定数量的尾随小数位写入数据(例如6) 通常, #2不会那么难,但是我不确定如何与#1结合使用。 我也想将数组写成一行。 像这样: 4.27500000 2.34500000 0.03213500000 回答1 savetxt等效于: In [631]: x=np.array([4.275000000e01, 2.345000000e01, 3.2135000000e-02]) In [632]: '%10.6f %10.6f %10.6f'%tuple(x) Out[632]: ' 42.750000 23.450000 0.032135' In [642]: outfile.write((' '.join(['%10.6f ']*x.size)+'\n\n') % tuple(x)) 42.750000 23.450000 0.032135 它将一维数组变成一个元组,并将其传递给format语句,并为数组中的每个项目指定格式。 回答2 试试这个: >>> a = np.array([[1,2
  • Python Pandas,将DataFrame写入固定宽度的文件(to_fwf?)(Python Pandas, write DataFrame to fixed-width file (to_fwf?))
    问题 我看到Pandas具有read_fwf ,但是它是否具有read_fwf类的DataFrame.to_fwf ? 我正在寻找对字段宽度,数值精度和字符串对正的支持。 似乎DataFrame.to_csv没有执行此操作。 numpy.savetxt可以,但是我不想这样做: numpy.savetxt('myfile.txt', mydataframe.to_records(), fmt='some format') 那似乎是错误的。 非常感谢您的想法。 回答1 除非有人在熊猫中实现此功能,否则您可以使用制表包: import pandas as pd from tabulate import tabulate def to_fwf(df, fname): content = tabulate(df.values.tolist(), list(df.columns), tablefmt="plain") open(fname, "w").write(content) pd.DataFrame.to_fwf = to_fwf 回答2 对于每列的自定义格式,您可以设置整行的格式。 fmt参数为每一行提供格式 with open('output.dat') as ofile: fmt = '%.0f %02.0f %4.1f %3.0f %4.0f %4.1f %4.0f %4.1f
  • Python:将两个列表写入两列文本文件(Python: Write two lists into two column text file)
    问题 假设我有两个列表:a = [1,2,3] b = [4,5,6]我想将它们写入文本文件,以便获得两列文本文件: 1 4 2 5 3 6 回答1 只需zip列表,然后将它们写到以tab为定界符的csv文件中即可: >>> a=[1,2,3] >>> b=[4,5,6] >>> zip(a,b) [(1, 4), (2, 5), (3, 6)] >>> import csv >>> with open('text.csv', 'w') as f: ... writer = csv.writer(f, delimiter='\t') ... writer.writerows(zip(a,b)) ... >>> quit() $ cat text.csv 1 4 2 5 3 6 回答2 您可以使用numpy.savetxt(),这是numpy库中的便捷工具。 最小的示例如下: import numpy as np xarray = np.array([0,1,2,3,4,5]) yarray = np.array([0,10,20,30,40,50]) #here is your data, in two numpy arrays data = np.array([xarray, yarray]) data = data.T #here you transpose your data
  • python中loadtxt_numpy中loadtxt 的用法
    numpy中有两个函数可以用来读取文件,主要是txt文件, 下面主要来介绍这两个函数的用法 第一个是loadtxt, 其一般用法为 numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0) 上面给出了loadtxt所有的关键字参数, 这里我们可以来一一解释并给出示例 这里我们使用的是jupyter notebook, 可以实现交互式的界面操作 %%writefile test.txt # 这是用来写入文件的代码1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 首先给出最简单的loadtxt的代码 importnumpy as np a= np.loadtxt('test.txt')#最普通的loadtxt print(a) 实际上就是直接写文件名, 其他关键字参数都是默认的。输出为 [[1. 2. 3. 4.] [2. 3. 4. 5.] [3. 4. 5. 6.] [4. 5. 6. 7.]] a为浮点数的原因为Python默认的数字的数据类型为双精度浮点数 %%writefile test.txt A B C1 2 3 4 5 6 7 8 9a= np.loadtxt(
  • numpy.loadtxt,ValueError:无法将字符串转换为浮点型(numpy.loadtxt, ValueError: could not convert string to float)
    问题 这是来自大型csv文件的示例: 6.1;6.1;7.2;8.9;5.0; 8.9;10.0;8.9;6.1;5.0; 如果我尝试使用np.loadtxt('test.csv', delimiter=';')将其读取为numpy数组, np.loadtxt('test.csv', delimiter=';')得到: ValueError:无法将字符串转换为浮点型: 不明白为什么? 回答1 您需要删除结尾的';' 从线。 如果您知道有5列,则可能的解决方法是: np.loadtxt('test.csv', delimiter=';', usecols=range(5)) 或者,改用genfromtext来处理缺失值 np.genfromtxt('test.csv', delimiter=';')[:,:-1] 回答2 因此,在我的情况下,csv文件在第一行中写入了列名。 例如 Column1,Column2,Column3 5.4,2.3,2.4 6.7,3.6,9.3 因此,正如文档中给出的,我所要做的就是使用skiprows参数 因此,API调用变成了 np.loadtxt('test.csv', delimiter=',', skiprows=1)