如何从字符串中读取Numpy数组?使用如下字符串:
"[[ 0.5544 0.4456], [ 0.8811 0.1189]]"
并将其转换为数组:
a = from_string("[[ 0.5544 0.4456], [ 0.8811 0.1189]]")
其中a
成为对象:np.array([[0.5544, 0.4456], [0.8811, 0.1189]])
。
我正在寻找一个非常简单的界面。一种将2D数组(浮点数)转换为字符串,然后读回它们以重新构造数组的方法:arr_to_string(array([[0.5544, 0.4456], [0.8811, 0.1189]]))
应返回"[[ 0.5544 0.4456], [ 0.8811 0.1189]]"
。string_to_arr("[[ 0.5544 0.4456], [ 0.8811 0.1189]]")
应返回对象array([[0.5544, 0.4456], [0.8811, 0.1189]])
。
理想情况下,arr_to_string
应该有一个精度参数来控制转换为字符串的浮点数的精度,这样您就不会得到像0.4444444999999999999999999
这样的条目。
我在NumPy的文档中找不到这样做的两种方式。np.save
允许您生成一个字符串,但之后无法将其重新加载(np.load
仅适用于文件)。
5条答案
按热度按时间5t7ly7z51#
挑战在于不仅要保存数据缓冲区,还要保存形状和数据类型。
np.fromstring
读取数据缓冲区,但将其作为一维数组;您必须从其他位置获取数据类型和形状。保存Python对象的一种由来已久的机制是
pickle
,并且numpy
与Pickle兼容:有一个NumPy函数可以读取泡菜字符串:
您在字符串中提到了
np.save
,但您不能使用np.load
。解决这个问题的一种方法是进一步深入代码,并使用np.lib.npyio.format
。save
字符串的标题包含dtype
和shape
信息:如果您想要一个人类可读的字符串,您可以尝试
json
。在数组的列表表示之间来回移动是
json
最明显的用法。可能有人编写了更精细的数组json
表示。您也可以采用
csv
--关于读/写CSV数组有很多问题。是用于此目的的糟糕的字符串表示形式。它看起来确实很像数组的
str()
,但使用的是,
而不是\n
。但是没有一种干净的方法来解析嵌套的[]
,缺少分隔符是一件令人头疼的事情。如果它始终使用,
,则json
可以将其转换为List。np.matrix
接受类似于matlab的字符串:izkcnapc2#
转发到字符串:
向后返回到数组:
如果使用
repr()
将数组转换为字符串,转换将非常简单。7uhlpewt3#
如果内部列表中的数字之间没有逗号,我不确定有什么简单的方法可以做到这一点,但如果有,那么可以使用
ast.literal_eval
:编辑:我没有测试过它,但您可以使用
re
在您需要的地方插入逗号:然后交给
ast.literal_eval
:(您需要注意匹配数字之间的空格,以及数字和减号之间的空格)。
idfiyjo84#
宋体字符串()允许您轻松地从字符串创建一维数组。下面是一个从字符串创建2D Numpy数组的简单函数:
用途:
产出:
j2cgzkjk5#
在我的例子中,我发现以下命令有助于转储:
和重新加载:
这应该适用于任何维度的NumPy数组。