2016-12-27 4 views
1

0以外のエントリごとに2次元行列Aをテキストファイルに保存しようとしています。 Iは、行と列が行と列のインデックスに対応する1D numpyのアレイであるインデックス付きのテキストファイルにnumpy行列を保存する

row[i]::column[j]::A[i,j] 

として(I、J)番目のエントリについて

、以下のフォーマットで一列にそれを保存したいと思い

私は、形状の不一致いるので、私はエラーを取得し、

np.savetxt(rel_file,(row,column,A),fmt='%d',delimiter="::",newline="\n"); 

を試してみました。しかし。私はループ内の各行と列のインデックスを繰り返し処理したくない(私はそれが時間がかかりすぎると思う、私は5000 * 5000行列を持っている)。

+0

'savetxt'は入力2d配列の各行に対して反復処理を行い、その行をフォーマットして行として書き込みます。 – hpaulj

答えて

0

手動で元の配列は、非常に長い配列であることを再形成する簡単な方法:

with open(...) as f: 
    for row in Acol: 
     f.write(fmt % tuple(row)) 

ここでは、この3列配列を作る一つの方法です行、col、値で構成されています。行をゼロ以外の値でフィルタリングするだけで動作します。以下の例は、ランダムな50,50配列で動作します。

a = np.random.randint(0,5, (50, 50)) 

rows = np.repeat(np.arange(50), 50) 
cols = np.tile(np.arange(50), 50) 

data = np.column_stack((rows, cols, a.flatten())) 

data_filtered = data[data[:, 2] != 0] 
np.savetxt('temp.txt',data_filtered,fmt='%d',delimiter="::",newline="\n"); 
0

私の最初の答えでは、すべての値を表示します。 nonzerosだけで列配列を作成する方が簡単です。 np.whereは、トリックのすべての値について

In [1548]: I,J = np.nonzero(A) # np.where 
In [1549]: Acol = np.column_stack((I,J,A[I,J])) 

==========

ん:

はここでスタートです。 iterativeですが、私がコメントした通り、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はまだ効果的に、それを繰り返すだろう:相続人

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], 
     .... 
関連する問題