【问题标题】:Write multiple arrays with different format (string and numbers) python编写具有不同格式(字符串和数字)python的多个数组
【发布时间】:2021-11-26 00:19:54
【问题描述】:

我对python很陌生,我想写以下内容(类似于matlab中的fprintf)我不知道为什么这个字符串不起作用???

这里是代码

import numpy as np 
coord=np.linspace(0,10,5)
keyy=("LE")
key=np.repeat(keyy,5)
out_arr=np.array_str(key)
zip=np.array([coord,out_arr])
zzip=zip.T
print(zzip)
savefile=np.savetxt("nam.dat",zzip,fmt="%f %s")

【问题讨论】:

  • 你得到了什么?你想得到什么?我们需要更多细节。
  • 我收到以下错误:VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences(这是一个列表或元组的列表或元组或具有不同长度或形状的 ndarray)已被弃用。如果您打算这样做,则必须在创建 ndarray 时指定“dtype=object”。
  • zip=np.array([coord,out_arr]) [array([ 0. , 2.5, 5. , 7.5, 10. ]) "['LE' 'LE' 'LE' ' LE' 'LE']"] Traceback(最近一次调用最后):文件“C:\MAC_folder\python\two.py”,第 9 行,在 savefile=np.savetxt("nam.dat",zzip ,fmt="%f %s") 文件“<__array_function__ internals>”,第 5 行,在 savetxt 文件“C:\Users\moham\AppData\Roaming\Python\Python39\site-packages\numpy\lib\npyio. py",第 1415 行,在 savetxt 中引发错误 ValueError: fmt has wrong number of % formats: %f %s
  • 我想要 5 行 2 列包括以下内容: 0 2.5 5 7.5 10 LE LE LE LE LE 试图按照我想要的方式写下来,但我不能??应该喜欢 zip 数组

标签: python python-3.x write


【解决方案1】:

问题出在以下行:

out_arr=np.array_str(key)

这是将数组['LE' 'LE' 'LE' 'LE' 'LE'] 转换为字符串 "['LE' 'LE' 'LE' 'LE' 'LE']"。注意引号。这不再是一个数组,它是一个单一的字符串,numpy 将它解释为一个长度为 1 的数组。您首先需要删除该行:

key=np.repeat(keyy,5)
zip=np.array([coord,key])

您将遇到的下一个问题是这会将coord 数字转换为字符串,从而导致所有元素都是字符串。这是因为 numpy 数组具有单一的固定类型(也有例外,但它们更复杂)。在这种情况下,唯一的方法就是将所有内容都设为字符串。

解决这个问题的简单方法是使用“对象”数组(基本上与 python 中的元胞数组相同),它存储任意 python 对象而不是固定数据:

zip=np.array([coord,out_arr], dtype='object')

但是,如果可以的话,更好的解决方案是使用 pandas。 Pandas 有点像 MATLAB 表,但功能更强大。它专为此类数据而设计,并且具有非常好的功能,可以像您在此处以更清晰、更明确的方式编写文本文件一样。

另外,zip 是一个内置函数,最好不要将变量命名为与内置函数相同的名称。允许,但zip 是一个重要功能,您不想阻止访问它。

【讨论】:

  • 感谢您的清晰解释,我尝试使用 Pandas,但似乎对我想要的东西不是很有用,我只是惊讶 Python 没有办法编写包含不同类型的数据?像matlab中的fprintf,然后为每一行或每一列指定格式??但是再次感谢..!
  • @Sci_tech:你完全可以在 Python 中以多种方式做到这一点。您可以将列保留为列表,例如例如cols = [coord,out_arr]。只是人们很少再这样做了,因为 pandas 更简单、更强大。
猜你喜欢
  • 2018-03-10
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2020-03-08
相关资源
最近更新 更多