将列表列表的字符串转换为 Numpy 数组

Posted

技术标签:

【中文标题】将列表列表的字符串转换为 Numpy 数组【英文标题】:Converting a string of lists of lists into a Numpy array 【发布时间】:2019-03-24 18:51:50 【问题描述】:

我对 Pandas 和 Numpy 还是很陌生。我正在尝试将包含列表列表的字符串转换为形状数组(150、150、3)。

现在,我正在从 CSV 导入 Pandas 数据框。数据框有 3 列:图像名称、数据、标签。当我运行 df['data'][0] 时,我得到一个如下所示的字符串:

'[[[110 122 100]\n  [120 132 110]\n  [119 131 110]\n  ...\n  [105  89  90]\n  [117 104 105]\n  [ 56  45  46]]\n\n [[116 127 106]\n  [123 135 114]\n  [117 131 110]\n  ...\n  [ 99  84  83]\n  [103  88  90]\n  [108  97  97]]\n\n [[112 127 106]\n  [121 136 114]\n  [116 130 112]\n  ...\n  [102  88  86]\n  [109  95  96]\n  [116 105 105]]\n\n ...\n\n [[145 158 148]\n  [125 134 124]\n  [110 112 103]\n  ...\n  [105  84  86]\n  [106  85  87]\n  [113  92  94]]\n\n [[144 167 154]\n  [135 152 142]\n  [122 132 124]\n  ...\n  [104  83  85]\n  [106  85  87]\n  [109  88  90]]\n\n [[138 170 158]\n  [143 170 160]\n  [138 158 149]\n  ...\n  [105  84  86]\n  [105  84  86]\n  [105  84  86]]]'

每组数字都是一个像素(R、G、B 的值)。基本上,我正在尝试重建图像阵列。我正在尝试将这些字符串中的每一个转换为形状数组 (150, 150, 3),以便它们看起来像:

[[[110 122 100]
  [120 132 110]
  [119 131 110] ... you get the idea. 

我试过.strip().split() 去掉\n 字符,但仍然没有解决问题。我也尝试过导入ast 并使用ast.literal_eval()- 如建议的here - 但它也不起作用。我收到一条奇怪的错误消息:

File "<unknown>", line 1
  [[[110 122 100]
         ^
SyntaxError: invalid syntax

任何帮助将不胜感激。感谢您的时间和考虑。

一切顺利, ry.co

【问题讨论】:

... 真的存在吗?因为如果是这样,你就不走运了。 ast.string_eval 适用于列表,但您没有列表...您有一个 numpy 打印。这还不够,您应该首先保存实际的 numpy 数组。 让我们知道您是否可以按照建议修复输入,或者您是否真的需要以您提供的格式解析输入。 【参考方案1】:

您的数据已经丢失。那些... 部分是 NumPy 丢弃您的数据的地方,因为您执行了类似 print(some_array) 的操作,而不是使用类似 numpy.save 的操作来保存它。这次您需要重新生成数据并正确保存。

【讨论】:

以上是关于将列表列表的字符串转换为 Numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章

字符串列表/数组到 numpy 浮点数组

NumPy字符串速查表

Python 怎么将列表类字典组字符串转换为列表?

将 2d numpy 数组转换为列表列表 [重复]

如何将 numpy 数组列表转换为单个 numpy 数组?

轻松将列表列表转换为用于大数据的 numpy Multidim 数组