私は、異なる長さの配列を含むサイズ125,30,360の2つの行列(m1とm2)を持っています。私がしたいのは、これらの配列を要素ごとに連結することです。今のところ、私は、forループでこれを行う:配列を含むNumpy行列を2つ組み合わせる
for i in range(125):
for j in range(30):
for k in range(360):
m1[i, j, k] = np.hstack(m1[i, j, k], m2[i, j, k])
だから結果m1
はまだ前と同じ大きさを持っている、しかし、各要素内の配列は、長さを変更しました。上記の例はうまくいきますが、時間がかかります(コードで何度もやっています)。それを行うより速い方法がありますか?
m1 = np.zeros([125, 30, 360], dtype=np.ndarray)
for i in range(125):
for j in range(30):
for k in range(360):
m1[i,j,k] = np.array([])
EDIT:m1
とm2
はそれが物事を明確にした場合、次のように作成された私のテキストは、上記のいくつかの混乱につながるている、少し不明でした。私はそれで、私がしたいことの下に小さな例を作りました。
ステップ1:m1とm2を作成します。
m1 = np.zeros([2, 2], dtype=np.ndarray)
m2 = np.zeros([2, 2], dtype=np.ndarray)
for i in range(2):
for j in range(2):
m1[i, j] = np.array(range(i+j))
m2[i, j] = np.array(range(i+j+1))
ステップ1の結果:
m1 = array([[array([], dtype=float64), array([0])],
[array([0]), array([0, 1])]], dtype=object)
m2 = array([[array([0]), array([0, 1])],
[array([0, 1]), array([0, 1, 2])]], dtype=object)
ステップ2:連結し、M1とM2。中
for i in range(2):
for j in range(2):
m1[i, j] = np.hstack((m1[i, j], m2[i, j]))
ステップ2の結果:
m1 = array([[array([ 0.]), array([0, 0, 1])],
[array([0, 0, 1]), array([0, 1, 0, 1, 2])]], dtype=object)
だから、質問は:2がより速く行うことがステップすることはできますか?
サイズは同じですが長さはどうですか? minmalサンプルケースを追加しますか? – Divakar
私は、forループの前と後の両方にm1.shape = 125,30,360を意味します。しかし、m1内の配列はサイズが変わります。例えば、m1 [10,10,10]が長さ5を有し、m2 [10,10,10]が長さ7をforループの前に有する場合、結果のm1 [10,10,10]は長さ12を有するこれが私の意図したことを明確にすることを願っています。 – Erik
なぜ 'm1'はリストではなく3dオブジェクトのdtype配列ですか? ( 'arrayer'のタイプミスを修正してください) – hpaulj