1. ホーム
  2. python

[解決済み] NumPyの配列のリストを平らにする?

2023-04-15 13:05:41

質問

NumPyの配列のリストという形式のデータを持っているようなのですが( type() = np.ndarray ):

[array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]), 
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]),
array([[ 0.00353654]])]

これをpolyfit関数に落とし込もうとしています。

m1 = np.polyfit(x, y, deg=2)

しかし、エラーが返されます。 TypeError: expected 1D vector for x

私は、データを次のようなものに平らにする必要があると仮定します。

[0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654 ...]

通常リストのリストで動作するリスト内包を試しましたが、これは予想通り動作しませんでした。

[val for sublist in risks for val in sublist]

どうするのが一番いいのでしょうか?

どのように解決するのですか?

あなたは numpy.concatenate を使うこともできます。これは名前が示すように、基本的にこのような入力リストのすべての要素を一つのNumPy配列に連結するものです。

import numpy as np
out = np.concatenate(input_list).ravel()

最終的な出力をリストにしたい場合は、次のように解決策を拡張することができます。

out = np.concatenate(input_list).ravel().tolist()

サンプル実行

In [24]: input_list
Out[24]: 
[array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]]),
 array([[ 0.00353654]])]

In [25]: np.concatenate(input_list).ravel()
Out[25]: 
array([ 0.00353654,  0.00353654,  0.00353654,  0.00353654,  0.00353654,
        0.00353654,  0.00353654,  0.00353654,  0.00353654,  0.00353654,
        0.00353654,  0.00353654,  0.00353654])

リストに変換する

In [26]: np.concatenate(input_list).ravel().tolist()
Out[26]: 
[0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654,
 0.00353654]