我从循环中获得了几个numpy数组(X,)并且想要存储它们。我知道,我可以把它们添加到传统的Python列表如何存储多个不同长度的numpy 1d数组并打印它
A = []
for i in range(10):
A.append(some_numpy_array)
但是,这个方案看起来并不优雅,不能被解析到numpy.savetxt。
numpy.savetxt("out.txt", A)
有没有其他解决方案?
我从循环中获得了几个numpy数组(X,)并且想要存储它们。我知道,我可以把它们添加到传统的Python列表如何存储多个不同长度的numpy 1d数组并打印它
A = []
for i in range(10):
A.append(some_numpy_array)
但是,这个方案看起来并不优雅,不能被解析到numpy.savetxt。
numpy.savetxt("out.txt", A)
有没有其他解决方案?
所以,你有数组列表
In [6]: alist = [np.arange(i) for i in range(3,7)]
In [7]: alist
Out[7]:
[array([0, 1, 2]),
array([0, 1, 2, 3]),
array([0, 1, 2, 3, 4]),
array([0, 1, 2, 3, 4, 5])]
有什么不雅样?你可以换一个对象数组
In [8]: arr=np.array(alist)
In [9]: arr
Out[9]:
array([array([0, 1, 2]), array([0, 1, 2, 3]), array([0, 1, 2, 3, 4]),
array([0, 1, 2, 3, 4, 5])], dtype=object)
那失去名单的方法,如在append
,但涨幅阵列的像reshape
。数组数学必须求助于python级别的迭代,速度等同于列表解析。还有一个大问题 - 所有的子列表长度都相同,结果是一个2d的int数组,而不是一个对象。
savetxt
,给出一个列表,将它变成一个数组,像我一样,然后尝试写'行'。 savetxt
旨在生成CSV输出 - 整齐的行和列与分隔符。该列表对此列表没有意义,是吗?
In [11]: np.savetxt('test.txt',alist,fmt='%s',delimiter=',')
In [12]: cat test.txt
[0 1 2]
[0 1 2 3]
[0 1 2 3 4]
[0 1 2 3 4 5]
这写了列表/数组作为1d数组与每行的一般字符串格式。有效
In [13]: for row in alist:
...: print(row)
...:
[0 1 2]
[0 1 2 3]
[0 1 2 3 4]
[0 1 2 3 4 5]
你可以做在一个开放的文件重复savetxt
,每次写一个数组:试图写3D阵列时
In [18]: with open('test.txt','wb') as f:
...: for row in alist:
...: np.savetxt(f, [row], fmt='%5d',delimiter=',')
In [19]: cat test.txt
0, 1, 2
0, 1, 2, 3
0, 1, 2, 3, 4
0, 1, 2, 3, 4, 5
人遇到同样的问题,或其他阵列,唐不适合简单的二维数字数组模型。您不必使用savetxt
将文本写入文件。简单的Python有足够的工具。
你需要一个ascii文件作为输出吗? – Astrom