将多个数组表示为numpy数组的python字符串
我有一个字符串,它以以下格式表示nD数组:将多个数组表示为numpy数组的python字符串,python,arrays,string,numpy,Python,Arrays,String,Numpy,我有一个字符串,它以以下格式表示nD数组: "[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] [[6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10]] [[11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 1
"[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] [[6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10]] [[11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15]]"
现在我想把这个字符串转换成一个numpy数组4x5x3(int)(大小可以是动态的,取决于单括号和双括号中的值的数量),类似这样:
/[11, 12, 13, 14, 15]
/ [11, 12, 13, 14, 15]
/ [11, 12, 13, 14, 15]
/ [11, 12, 13, 14, 15]
/[6, 7, 8, 9, 10]
/ [6, 7, 8, 9, 10]
/ [6, 7, 8, 9, 10]
/ [6, 7, 8, 9, 10]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
除了在每个字符上循环外,如何有效地执行此操作。您可以简单地计算字符串,将其转换为列表的元组。然后将其转换为NumPy数组。一个问题是,您的字符串在每个2D子数组之后(即]]
之后)缺少逗号。要解决此问题,我们只需插入以下缺少的逗号:
import numpy as np
s = "[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] [[6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [6, 7, 8, 9, 10]] [[11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15], [11, 12, 13, 14, 15]]"
a = np.array(eval(s.replace(']]', ']],')))
print(a)
关于eval的注记
使用eval
通常被认为有点危险,因为它可以执行任意代码。一个更安全的选择是ast
模块中的literal\u eval
:
import ast
a = np.array(ast.literal_eval(s.replace(']]', ']],')))
为什么矩阵以倾斜方式打印,而且字符串中缺少一些命令representation@DeveshKumarSingh我把它倾斜以显示深度。双括号表示第三维度的大小。首先为什么有这样的字符串表示
eval
在标准列表显示上运行良好,它不适用于numpy
数组打印。好的,最初我的数据是不同的形式,但是我正在基于此答案应用一些合并,将其转换为上述格式。好的方法。虽然我建议只建议使用字面上的评估版本,如果必须的话,只在必要的时候顺便谈论评估,而不是作为主要答案。谢谢,这很好。老实说,我一直在看ast.literal\u eval
,但我对python还是新手,所以不知道如何使用它。