将列表列表的字符串转换为 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 数组的主要内容,如果未能解决你的问题,请参考以下文章