我想将我的数据提供给(n,4,5)python numpy数组。 有什么简单的解决方案吗?
我格式化我的数据,以便文件的每一行看起来像一个python数组,但很难将其作为python数组读取,例如:
[0,0,0,1,1],[0,0,0,0,0],[0,1,1,0,0],[1,0,0,0,0] //line1
[1,0,0,1,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0] //line2
...
欲望输出:
myarray=[[[0,0,0,1,1],[0,0,0,0,0],[0,1,1,0,0],[1,0,0,0,0]],[[1,0,0,1,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0]]...]
看起来像条带,eval和json都运行不好..请帮忙
我也尝试过:
with open('filename') as f:
data = f.readlines()
data = [x.strip() for x in data]
array=[]
for i in data:
a=split(r'(?<=\]),(?=\[)',i )
array.append(a)
data=np.array((array))
答案 0 :(得分:3)
将每一行包裹在另外一对括号中,然后传递给合适的eval函数:
import ast
arr = []
with open('input.txt', 'r') as infp:
for l in infp:
arr.append(ast.literal_eval('[%s]' % l)) # replace with eval() if you trust your input data
print(arr)
输出:
[[[0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 1, 1, 0, 0], [1, 0, 0, 0, 0]], [[1, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0]]]
根据要求做了一点解释:
[1,2],[3,4]
形式,而Python列表列表是[[1, 2], [3, 4]]
,因此'[%s]'
用于包含该行中的一行一对括号使其成为有效的Python。 ast.literal_eval()
是eval()
的安全形式,只接受文字(没有函数调用或其他类似的东西)。
总而言之,对于行[1, 2], [3, 4]
,有效代码为eval('[[1, 2], [3, 4]]')
。
答案 1 :(得分:-1)
text =&#39; a,b,c&#39;
text = text.split(&#39;,&#39;)
文本 [&#39; a&#39;,&#39; b&#39;,&#39; c&#39; ]