将多个数组表示为numpy数组的python字符串

将多个数组表示为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

我有一个字符串,它以以下格式表示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, 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还是新手,所以不知道如何使用它。