如果我只有numpy.array
的字符串表示:
>>> import numpy as np
>>> arr = np.random.randint(0, 10, (10, 10))
>>> print(arr) # this one!
[[9 4 7 3]
[1 6 4 2]
[6 7 6 0]
[0 5 6 7]]
如何将其转换回numpy数组?实际上手动插入,
并不复杂,但我正在寻找一种编程方法。
一个简单的正则表达式用,
替换空格实际上适用于个位数整数:
>>> import re
>>> sub = re.sub('\s+', ',', """[[8 6 2 4 0 2]
... [3 5 8 4 5 6]
... [4 6 3 3 0 3]]
... """)
>>> sub
'[[8,6,2,4,0,2],[3,5,8,4,5,6],[4,6,3,3,0,3]],' # the trailing "," is a bit annoying
它可以被转换为几乎相同的数组(dtype可能会丢失,但没关系):
>>> import ast
>>> np.array(ast.literal_eval(sub)[0])
array([[8, 6, 2, 4, 0, 2],
[3, 5, 8, 4, 5, 6],
[4, 6, 3, 3, 0, 3]])
但它对多位整数和浮点数失败:
>>> re.sub('\s+', ',', """[[ 0. 1. 6. 9. 1. 4.]
... [ 4. 8. 2. 3. 6. 1.]]
... """)
'[[,0.,1.,6.,9.,1.,4.],[,4.,8.,2.,3.,6.,1.]],'
因为它们在开始时有一个额外的,
。
一个解决方案不一定需要基于正则表达式,任何其他适用于unabriged(不缩短为...
)bool/int/float/1-4维复杂数组的方法都可以。
2条答案
按热度按时间yfjy0ee71#
这里有一个非常手动的解决方案:
或者一个不太手动的解决方案,基于检测在哪里插入逗号:
aamkag612#
更新:
测试:
旧答案:
我们可以尝试使用Pandas:
注意:它可能只适用于没有
...
的2D数组(省略号)