2012-02-20 10 views
21

a = [1,2,3,4,5]a_string = "1 2 3 4 5"に変換します。実数配列はかなり大きい(50000x200)ので、私はfor loopsを使うのが遅すぎると仮定します。かっこなしのナンシーアレイを印刷するには?

+0

:これを確認してくださいhttp://stackoverflow.com/questions/5365520/numpy-convertting-array-from-float-to-strings – George

+3

本当に大きな配列の文字列表現が必要ですか?何のために? –

+0

その後、私はこれと他の3つの配列をファイルに書く必要があります。すべての配列は大きさが異なりますので、それらをファイルに交互に書き込む必要があります。そのため、 'writeline'を使って手動で行うことを計画しています。 – Framester

答えて

32

あなたは、文字列からjoinメソッドを使用することができます。

>>> a = [1,2,3,4,5] 
>>> ' '.join(map(str, a)) 
"1 2 3 4 5" 
+0

申し訳ありません、それを修正しました – tito

+0

ありがとう、私は前に 'join'を試みました。 'Map'は私にとって欠けている部分です。 – Framester

+2

より単純なバリアント(IMHO)はイテレータになります: ''' .join(aのnに対してstr(n))' – alexis

3

numpyのは、このarray_strarray_reprのための2つの機能を提供します - いずれかが、あなたのニーズに合わせなければなりません。など、あなた自身を記述するかもしれない機能よりも優先されなければならない、

>>> from numpy import arange, reshape, array_str 
>>> M = arange(10).reshape(2,5) 
>>> M 
array([[0, 1, 2, 3, 4], 
     [5, 6, 7, 8, 9]]) 
>>> array_str(M) 
'[[0 1 2 3 4]\n [5 6 7 8 9]]' 
>>> array_repr(M) 
'array([[0, 1, 2, 3, 4],\n  [5, 6, 7, 8, 9]])' 

これら2つの関数は、両方の高度に最適化されていると:あなたがいずれかを使用できますので、ここではそれぞれの例です。このサイズの配列を扱うとき、私はあなたが得ることができるすべてのスピードを望むと思います。

+1

組み込み関数を使用することは間違いありませんが、それでもブラケットはそのままです。他の類似したケースでも優れています。 +1 – Framester

+0

あなたはファイルに文字列を保存する必要があると言いました。後でそのファイルから文字列を取得する予定がある場合は、角括弧を付けると便利です。また、サブストリングとスプリット()の組み合わせは大括弧を削除します。 – mau5padd

3

あなたはリスト(あなたがあなたの投稿で、「本当のnumpyの配列」を言及するので)あなたは、配列の文字列表現にre.subを使用することができますのではなく、そもそもnumpyの配列がある場合:

print(re.sub('[\[\]]', '', np.array_str(a))) 

この場合も、これはあなたの配列aがある点では数が少ない配列であると仮定しています。これには、行列を扱うという利点もあります。

4

import numpy as np import sys a = np.array([[0.0, 1.0, 2.0, 3.0]]) np.savetxt(sys.stdout, a) 

np.savetxt出力:

0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 

または配列が反転している場合:

a = np.array([0.0, 1.0, 2.0, 3.0]) 
np.savetxt(sys.stdout, a, newline=" ") 

それとも、本当に文字列が必要な場合:

を012あなたが得ることが fmt精度を制御することができ

np.savetxt(sys.stdout, a, fmt="%.3f") 

出力:

0.000 1.000 2.000 3.000 

か:

np.savetxt(sys.stdout, a, fmt="%i") 

出力:

0 1 2 3 

Python 2.7.12、numpy 1.11.1でテスト済みです。

関連する問題