44

a = [1,2,3,4,5]に変換したいa_string = "1 2 3 4 5"。実際のnumpy配列はかなり大きい(50000x200)ので、使用for loopsが遅すぎると思います。

4

7 に答える 7

60

join文字列からメソッドを使用できます。

>>> a = [1,2,3,4,5]
>>> ' '.join(map(str, a))
"1 2 3 4 5"
于 2012-02-20T11:12:38.837 に答える
25

np.savetxt

Python 3(も参照):

import numpy as np
import sys

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

Python 2:

import numpy as np
import sys

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

出力:

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

精度を制御する

使用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 3:

import io
bio = io.BytesIO()
np.savetxt(bio, a)
mystr = bio.getvalue().decode('latin1')
print(mystr, end='')

使用するデフォルトのエンコーディングがドキュメントlatin1に記載されているため、使用します。

Python 2:

import StringIO
sio = StringIO.StringIO()
np.savetxt(sio, a)
mystr = sio.getvalue()
print mystr

オールインワンライン

または、本当にすべてを1行にまとめたい場合:

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

出力:

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

TODO:末尾にスペースがあります。私が見る唯一の解決策は、文字列とストリップに保存することです。

Python2.7.15rc1およびPython3.6.6、numpy1.13.3でテスト済み

于 2017-02-04T23:17:19.890 に答える
13

多分少しハッキーですが、私はそれを使用した後にそれらをスライスしますnp.array2string

import numpy as np

a = np.arange(0,10)
a_str = np.array2string(a, precision=2, separator=', ')
print(a_str[1:-1])

結果:

    0, 1, 2, 3, 4, 5, 6, 7, 8, 9

np.array2stringたくさんのオプションもあるので、たくさんのデータで非常に役立つ列幅を設定できます。

a = np.arange(0,15)
a_str = np.array2string(a, precision=2, separator=', ', max_line_width=15)
print(' ' + a_str[1:-1])

与える:

       0,  1,  2,
       3,  4,  5,
       6,  7,  8,
       9, 10, 11,
      12, 13, 14

そして、それは配列要素でスマートに分割されます。最初のブラケットを削除した後の最初の行の整列を考慮して、文字列の先頭に追加されたスペースに注意してください。

于 2018-06-19T19:04:34.020 に答える
5

リストではなく最初にnumpy配列がある場合(投稿で「実際のnumpy配列」について言及しているため) re.sub、配列の文字列表現に使用できます。

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

a繰り返しになりますが、これは、ある時点で配列がnumpy配列であると想定しています。これには、行列にも対応できるという利点があります。

于 2016-01-17T00:56:21.440 に答える
4

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つの関数はどちらも高度に最適化されているため、自分で作成する関数よりも優先する必要があります。このサイズの配列を扱うときは、可能な限りの速度が必要だと思います。

于 2012-02-20T11:34:35.967 に答える
3
>>> a=np.array([1,2,3,4,5])
>>> print(*a)
1 2 3 4 5

>>> print(str(a)[1:-1])
1 2 3 4 5

リストと同じ

于 2020-07-17T17:44:51.367 に答える
2

浮動小数点数と2次元配列を扱っている場合は、次のこともできます。

import numpy as np
np.random.seed(77)

def my_print(x):
    for row in x:
        print(' '.join(map(lambda x: "{:.3f}\t".format(x), row)))

if __name__ == '__main__':
    x = np.random.random(size=(3, 9))
    my_print(x)

出力:

0.919    0.642   0.754   0.139   0.087   0.788   0.326   0.541   0.240  
0.545    0.401   0.715   0.837   0.588   0.296   0.281   0.706   0.423  
0.057    0.747   0.452   0.176   0.049   0.292   0.067   0.751   0.064
于 2020-07-17T17:05:02.200 に答える