In [34]: a
Out[34]: [[1, 15.02], [2, 14.38], [3, 14.6]]
In [35]: b=np.array(a, dtype=float).T
In [36]: b
Out[36]:
array([[ 1. , 2. , 3. ],
[ 15.02, 14.38, 14.6 ]])
In [37]: list(zip(*b))
Out[37]: [(1.0, 15.02), (2.0, 14.380000000000001), (3.0, 14.6)]
もし私最初の過去b
tolist
通過:最初のケースで
In [38]: list(zip(*b.tolist()))
Out[38]: [(1.0, 15.02), (2.0, 14.38), (3.0, 14.6)]
の要素タプルはまだnp.float64
のラッパーを持っていますが、tolist
はすべてそれらをネイティブのPython番号に抽出します:
In [39]: type(list(zip(*b))[1][1])
Out[39]: numpy.float64
In [40]: type(list(zip(*b.tolist()))[1][1])
Out[40]: float
item
は、ネイティブの数を抽出する別の方法です:
In [41]: list(zip(*b))[1][1]
Out[41]: 14.380000000000001
In [42]: list(zip(*b))[1][1].item()
Out[42]: 14.38
私はsetprintoptions
がnp.float64
の場合には適用されない理由を言うことはできませんが、np.array
を行います。
一般に、配列とそのすべての値をネイティブのPythonリストに変換する場合は、tolist()
を使用する方がよいでしょう。リストやジップのような操作では不十分です。彼らは、配列の最初の次元に繰り返すが、再帰的要素変換しません。
部分変換(S):
In [43]: list(b)
Out[43]: [array([ 1., 2., 3.]), array([ 15.02, 14.38, 14.6 ])]
In [44]: list(b[1])
Out[44]: [15.02, 14.380000000000001, 14.6]
全変換:どうやら
In [45]: b.tolist()
Out[45]: [[1.0, 2.0, 3.0], [15.02, 14.38, 14.6]]
をfloat64
のフォーマッタは、set_printoptions
の値に関係なく、すべての精度を示します。
In [58]: 14.380000000000001
Out[58]: 14.38
In [59]: np.array(14.380000000000001)
Out[59]: array(14.38)
In [60]: np.float64(14.380000000000001)
Out[60]: 14.380000000000001
In [61]: np.float32(14.380000000000001)
Out[61]: 14.38
np.float64(...)
オブジェクトは多くの点で単一のアイテム配列のようですが、微妙な点で異なります。通常、このようなオブジェクトは直接作成しませんが。
これはもうnp-arrayではないので、numpyの印刷機械は使用されていないのですか? – sascha
この場合、どの印刷技術が適用されるべきですか? – Krischu
正確なユースケースに応じて、[this](https://stackoverflow.com/a/1567630/2320035)のような文字列フォーマットに基づいて自分自身を定義する必要があります。 – sascha