Python 不改变格式的浮点数组中的字符串数组

Python 不改变格式的浮点数组中的字符串数组,python,arrays,string,types,format,Python,Arrays,String,Types,Format,是否有一种方法可以在不改变数组格式的情况下将字符串包含在浮点数组中,从而使所有浮点都更改为字符串,但字符串元素仍保留为字符串 例如 理想情况下,我希望格式保持与上面输入“a”时的外观相同 这使得: array(['hi', '1.0', '2.0', '3.0'], dtype='|S3') 那么如何将这样的数组保存为文本文件呢 非常感谢, J使用泡菜: import pickle a = ['abc',3,4,5,6,7.0] pickle.dump( a, open( "save.p",

是否有一种方法可以在不改变数组格式的情况下将字符串包含在浮点数组中,从而使所有浮点都更改为字符串,但字符串元素仍保留为字符串

例如

理想情况下,我希望格式保持与上面输入“a”时的外观相同

这使得:

array(['hi', '1.0', '2.0', '3.0'], dtype='|S3')
那么如何将这样的数组保存为文本文件呢

非常感谢,

J

使用泡菜:

import pickle

a = ['abc',3,4,5,6,7.0]
pickle.dump( a, open( "save.p", "wb" ))
b = pickle.load( open( "save.p", "rb" ) )

print(b)
输出:

['abc', 3, 4, 5, 6, 7.0]

我猜您的问题在于:您想使用np.savetxt转储数组np.array['hi',1',2',3.],但出现以下错误:

TypeError: Mismatch between array dtype ('|S3') and format specifier ('%.18e')
如果是这种情况,您只需要在np.savetxt中设置fmt kwarg。您可以使用%s来代替默认的%.18e(用于格式化浮点数据),后者将内容格式化为字符串,即使数组中的原始值是数字

因此,这将起作用:

import numpy as np
a = np.array([ 'hi' , 1. , 2. , 3. ])
np.savetxt("test.out",a,fmt="%s")
请注意,您可以使用原始列表执行此操作-numpy将为您将其转换为数组。例如,你可以做:

np.savetxt("test.out",[ 'hi' , 1. , 2. , 3. ],fmt="%s")
它也应该很好用

对于问题的第一部分,这并不是numpy阵列的真正用途。如果您试图将不同的数据类型放入同一个数组中,那么您可能需要不同的数据结构。一个普通的python列表可以做到这一点,但根据您的情况,dict可能是您想要的

编辑:根据注释线程和特定问题,这看起来像是试图在数据文件上创建头。这可以直接通过

np.savetxt("a.txt",a,header="title goes here")

这可以用np.loadtxt直接读取,因为默认情况下,标题前面有前缀,默认情况下,np.loadtxt会忽略以开头的行。

在标记中提到python,因为这就是您正在使用的I assumeoops,我们开始了,很抱歉-是的,我在python异构中使用PythonAren的t列表?我不理解您面临的问题…问题是,当我创建此数组并尝试将其保存为文本文件时,它不会执行此操作,因为数组数据类型之间不匹配,因此本质上,我要问的是如何克服此问题,并保存一个包含字符串和浮动的数组,以便我可以重新读取并使用文本文件稍后将提取字符串和浮点数。虽然指定dtype=object可能会解决一些问题,但NumPy的设计并非如此,使用对象数组将导致奇怪的不兼容性,并破坏NumPy数组相对于普通列表的大部分优势。谢谢!如果您尝试vstack两个与“a”样式相同的数组,然后保存/打开,这将如何工作?如果您只需要vstack,您仍然可以使用列表c=[a]+[b]执行此操作。但是,如果你需要更多的NUMPY,如果你真的需要混合数据类型,你应该考虑使用熊猫。好的,谢谢。我将记住这一点,并尝试保存为一种数据类型,提取所需的列,并将它们分别转换为不同的数据类型,这就是我所拥有的确切错误,谢谢。这对保存文件起到了作用,但如果要加载该数组,则会出现一个错误,即无法将“hi”元素的字符串转换为float。有什么想法吗?顺便谢谢你!没关系,我做了一个快速搜索,并找到了如何做到这一点,谢谢你星猴!你能给出你使用的方法吗?这样我可以把它添加到我的答案中?它将对未来的谷歌用户有用。是的,这很好,它是这样的:data=np.loadtxt'a.txt'新行数据_floats=data[0,1:]。astypenp.floatHmm-你之所以混合字符串和floats,是因为你想在输出文件的顶部有一个标题行吗?在这种情况下,您可以在这里执行np.savetxta.txt,a,header=title,它将以title-go-here启动文件。然后您可以直接使用loadtxt,因为它将忽略以开头的任何行。
np.savetxt("a.txt",a,header="title goes here")