在我的第一個答案中,我顯示了所有的值;僅使用非零值就可以更容易地創建列數組。 np.where
的伎倆
In [1548]: I,J = np.nonzero(A) # np.where
In [1549]: Acol = np.column_stack((I,J,A[I,J]))
==========
對於所有值:
這裏是一個開始;它是迭代的,但正如我所評論的那樣,np.savetxt
也是如此。
In [1523]: A=np.arange(25).reshape(5,5)
In [1526]: list(np.ndenumerate(A))
Out[1526]:
[((0, 0), 0),
((0, 1), 1),
((0, 2), 2),
((0, 3), 3),
((0, 4), 4),
((1, 0), 5),
In [1528]: with open('txt','w') as f:
...: for (i,j),v in np.ndenumerate(A):
...: f.write('%d::%d::%d\n'%(i,j,v))
...:
In [45]: cat txt
0::0::0
0::1::1
0::2::2
0::3::3
0::4::4
1::0::5
我們可以使第(n,3)陣列,其中包括指數的和扁平的A
值。但savetxt
仍然反覆,從而有效:
with open(...) as f:
for row in Acol:
f.write(fmt % tuple(row))
這裏是使這3列陣列的一種方法:
In [1535]: I,J = np.meshgrid(np.arange(A.shape[0]),np.arange(A.shape[1]),indexin
...: g='ij')
In [1536]: I
Out[1536]:
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]])
In [1537]: Acol=np.column_stack((I.ravel(),J.ravel(),A.ravel()))
In [1538]: Acol
Out[1538]:
array([[ 0, 0, 0],
[ 0, 1, 1],
[ 0, 2, 2],
[ 0, 3, 3],
[ 0, 4, 4],
....
'savetxt'遍歷每個輸入2d數組的「行」,對該行進行格式化,並將其作爲一行寫入。 – hpaulj