Python 将txt(字符串)文件中的4D浮点数组转换为numpy浮点数组
我有一个txt(字符串)文件,看起来像:Python 将txt(字符串)文件中的4D浮点数组转换为numpy浮点数组,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个txt(字符串)文件,看起来像: [[[[0.17262284, 0.95086717, 0.01172171, 0.79262904], [0.52454078, 0.16740103, 0.32694925, 0.78921072], [0.77886716, 0.35550488, 0.89272706, 0.36761104]], [[0.14336841, 0.94488079, 0.83388505, 0.02065268], [0.31
[[[[0.17262284, 0.95086717, 0.01172171, 0.79262904],
[0.52454078, 0.16740103, 0.32694925, 0.78921072],
[0.77886716, 0.35550488, 0.89272706, 0.36761104]],
[[0.14336841, 0.94488079, 0.83388505, 0.02065268],
[0.31804594, 0.22056339, 0.84088501, 0.94994676],
[0.57845057, 0.12645735, 0.12628646, 0.05526736]]]]
形状为(1,2,3,4)。
如何轻松地将其转换为考虑数据类型和形状(可从括号中推断)的NumPy
数组?
假设我有txt文件中的形状,它会使它更容易吗?
我试过使用np.loadtxt
,似乎它不能处理这个4d形状,它作为1D数组加载。
我可以自己解析形状,然后将所有成员转换为浮点数,但我相信有np函数已经做到了这一点。文件不是由我创建的-我只需要pkl数组。此数组编码与json的编码方案匹配,因此您可以使用它来加载它:
import json
import numpy as np
arr = np.array(json.load(open("array.txt", "r")))
或者,如果数据是字符串,请使用:
arr = np.array(json.loads(array_as_string))
可以使用
ast.literal\u eval()
函数对包含数组的文本字符串求值(“读取”),然后将其包装到numpy数组构造函数中,如下所示:
import ast
import numpy as np
# Option 1: From a text string.
a = np.array(ast.literal_eval(txt))
# Option 2: Directly from text file.
a = np.array(ast.literal_eval(open('np_array.txt').read()))
a.shape
>>> (1, 2, 3, 4)
设置:
txt = """[[[[0.17262284, 0.95086717, 0.01172171, 0.79262904],
[0.52454078, 0.16740103, 0.32694925, 0.78921072],
[0.77886716, 0.35550488, 0.89272706, 0.36761104]],
[[0.14336841, 0.94488079, 0.83388505, 0.02065268],
[0.31804594, 0.22056339, 0.84088501, 0.94994676],
[0.57845057, 0.12645735, 0.12628646, 0.05526736]]]]"""
你是如何创建这个文件的?当你“尝试使用np.loadtxt”时到底发生了什么。有文档记录的、内置的、安全版本的
eval
。以前从未见过。@DanielF-是的,一个非常有用/安全的工具。:-)