私は、状態が任意の次元数のnumpy配列で表される変数のセットを統合するシミュレーションモデルを持っています。シミュレーションの後、特定の時点で要素が可変状態を表す配列のリストが作成されました。N個の次元の配列を複数の1D配列に分割する
シミュレーション結果を出力するために、これらの配列を複数の1D配列に分割します。ここで要素は状態変数の同じコンポーネントに時間的に対応します。以下は、複数の時間ステップにわたる2D状態変数の例です。
import numpy as np
# Arbitrary state that is constant
arr = np.arange(9).reshape((3, 3))
# State variable through 3 time steps
state = [arr.copy() for _ in range(3)]
# Stack the arrays up to 3d. Axis could be rolled here if it makes it easier.
stacked = np.stack(state)
私が取得する必要があり、出力は次のようになります。
[np.array([0, 0, 0]), np.array([1, 1, 1]), np.array([2, 2, 2]), ...]
私はnp.split(stacked, sum(stacked.shape[:-1]), axis=...)
をやってみました(axis=
のためにすべてを試してみました)が、次のエラーを取得しました:ValueError: array split does not result in an equal division
を。これを行う方法は、一般的なケースで動作するnp.nditer
のnp.split
を使用しますか?
I, J, K = stacked.shape
result = []
for i in range(I):
for j in range(J):
result.append(stacked[i, j, :])
。しかし、私はそれがより一般的になるために私が利用することができるnumpyの何かがあることを望んでいます。
'list'の素敵な使い方!かなり速く見えます。一般的なものにするために、おそらくシェイプのparamを 'list(stacked.reshape(-1、stacked.shape [-1]))'という形で使うことができます。 – Divakar
私は入力例の配列を使いこなしました。 'stacked = np.stack(state)'でなければなりません。質問が更新されましたので、あなたの答えは 'list(stacked.reshape(3、-1).T)'になるはずです。私は@Divakar、 'list'の素晴らしい使い方に同意します! – pbreach
どうすれば別の軸にスタックするのですか?私の編集を参照してください – hpaulj