質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

855閲覧

二次元nd.array配列を一次リストに変更したい

pypypy

総合スコア8

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/09/27 05:56

タイトルの通りですが,要素の中身(nd.array?)をlistなどに変更したいです.

プログラムの意図としては,あるデータに対してカルマンフィルタを適用するライブラリ,[Kalmanfilter]を用いてカルマンフィルター(filtered)化とスムース(smoothed)化をしました.
適用したグラフは出力できたのですが,信用区間(95%)をグラフで出力したいので,フィルター化で出力されたnd.array?の配列をリスト化などしたいと考えています.

中身を見て頂いた方が早いと思うので,早速ソースコードと要素をprintした結果をお見せ致します.

最初はpandasデータをリストに変換します.

Python3

1y = pd.Series(df_~~~.~~~.values) 2print(y) 3observations = y.tolist()#pdをlistに変換 4print(observations)

out

1#結果 2 3#y: 40 25.88 51 25.88 62 25.88 73 26.37 84 25.88 9 ... 101436 25.88 111437 25.88 121438 25.88 131439 25.88 141440 25.88 15Length: 1441, dtype: float64 16 17#observations: 18[25.88, 25.88, 25.88, 26.37, 19・・・ 20 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 26.37, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 25.88, 26.37, 25.88, 25.88, 25.88, 25.88, 25.88]

次に,このリストに対してカルマンフィルターを適用し,フィルター化します.
フィルター化した時の出力結果の配列を[out]に示します.

Python3

1kf = KalmanFilter(transition_matrices=np.array([[1, 1], [0, 1]]), 2 transition_covariance=0.0000001*np.eye(2)) 3 4smoothed_states_pred = kf.em(observations).smooth(observations)[0] 5filtered_states_pred = kf.em(observations).filter(observations)[0] 6print(filtered_states_pred)

out

1[[ 2.60376661e+01 -1.65511774e-03] 2 [ 2.60353297e+01 -1.66246550e-03] 3 [ 2.60325095e+01 -1.67924621e-03] 4 ... 5 [ 2.59074212e+01 -2.42859148e-03] 6 [ 2.59031436e+01 -2.46371053e-03] 7 [ 2.58991499e+01 -2.49276937e-03]]

この二次元配列?をもとの扱いやすい配列(リストなど)に変換したいです.
[~~,~~,~~,]

試したこととしては,numpyでそのままリスト化しようとしましたが,中の配列が取れず困っています.

Python

1filter_df = np.array(filtered_states_pred.values.flatten())

out

1[[26.037666140460175, -0.0016551177424565181], [26.035329693820763, -0.00166246550103721], [26.03250951997295, -0.0016792462141711488], [26.034479896627285, -0.0016208213401725316], ・・・]

これを一次にリスト化する方法,もしくはこの配列のままseabornなどでグラフ上に95%の信用区間を領域で図示する方法をご教授,ご助言いただきたいです.
よろしくお願い致します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2020/09/27 06:23

扱いやすい配列、とは、どういう意味でしょうか? 2次元のndarrayが、2次元のリストに変換されるのは普通のことです。 期待している結果を言葉でなく出力イメージとして説明お願いします。
guest

回答1

0

ベストアンサー

「扱いやすい配列」がどういう意味なのか不明でしたので、いくつかの形に変換してみました。

Python

1import numpy as np 2 3# 途中は抜かしています 4filtered_states_pred =np.array([ 5 [ 2.60376661e+01, -1.65511774e-03], 6 [ 2.60353297e+01, -1.66246550e-03], 7 [ 2.60325095e+01, -1.67924621e-03], 8 [ 2.59074212e+01, -2.42859148e-03], 9 [ 2.59031436e+01, -2.46371053e-03], 10 [ 2.58991499e+01, -2.49276937e-03]]) 11 12print('(1) ndarry型') 13print(filtered_states_pred) 14 15print('(2) そのまま2次元リストに変換') 16print(filtered_states_pred.tolist()) 17 18print('(3) フラット化してリストに変換') 19print(np.ravel(filtered_states_pred).tolist()) 20 21print('(4) 最初の要素のみリストに変換') 22print(filtered_states_pred[:,0].tolist()) 23 24print('(5) 2番目の要素のみリストに変換') 25print(filtered_states_pred[:,1].tolist())

出力

(1) ndarry型 [[ 2.60376661e+01 -1.65511774e-03] [ 2.60353297e+01 -1.66246550e-03] [ 2.60325095e+01 -1.67924621e-03] [ 2.59074212e+01 -2.42859148e-03] [ 2.59031436e+01 -2.46371053e-03] [ 2.58991499e+01 -2.49276937e-03]] (2) そのまま2次元リストに変換 [[26.0376661, -0.00165511774], [26.0353297, -0.0016624655], [26.0325095, -0.00167924621], [25.9074212, -0.00242859148], [25.9031436, -0.00246371053], [25.8991499, -0.00249276937]] (3) フラット化してリストに変換 [26.0376661, -0.00165511774, 26.0353297, -0.0016624655, 26.0325095, -0.00167924621, 25.9074212, -0.00242859148, 25.9031436, -0.00246371053, 25.8991499, -0.00249276937] (4) 最初の要素のみリストに変換 [26.0376661, 26.0353297, 26.0325095, 25.9074212, 25.9031436, 25.8991499] (5) 2番目の要素のみリストに変換 [-0.00165511774, -0.0016624655, -0.00167924621, -0.00242859148, -0.00246371053, -0.00249276937]

投稿2020/09/27 06:43

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pypypy

2020/09/27 07:19

迅速なご回答ありがとうございました. 頂いた修正依頼の修正が先にできず申し訳ございません. リストの要素のみ抜き出して変換する方法があったのですね,とても参考になりました. 頂いた例ですと(4)のような変換が理想でしたのでこちらの変換方法を試してみたいと思います. 初歩的な質問にご丁寧に対応頂きありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問