私はとB
の配列を持っており、N
番目の次元に沿って連結したいと思います。たとえば、任意の軸に沿った未知の次元のnumpy配列の連結
>>> A = rand(2,2) # just for illustration, dimensions should be unknown
>>> B = rand(2,2) # idem
>>> N = 5
>>> C = concatenate((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 2
>>> C = stack((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 3
関連する質問があります。here残念ながら、ディメンションが不明な場合に提案されたソリューションが機能しないため、最小寸法がN
になるまで、いくつかの新しい軸を追加する必要があります。 (私が連結することができるはずです。このコードで
newshapeA = A.shape + (1,) * (N + 1 - A.ndim)
newshapeB = B.shape + (1,) * (N + 1 - B.ndim)
concatenate((A.reshape(newshapeA), B.reshape(newshapeB)), axis=N)
2,2,1,3:私が行っている何
はN
番目の大きさになるまで1のアップと形状を拡張して、連結することです)配列を軸3に沿った(2,2)配列で置き換えます。
これを達成するより良い方法はありますか?
ps:最初の回答が示唆通りに更新されました。私はあなたのアプローチに何か問題がないと思う
>>> import numpy as np
>>> A = np.random.rand(2,2)
>>> B = np.random.rand(2,2)
>>> N=5
>>> while A.ndim < N:
A= np.expand_dims(A,x)
>>> while B.ndim < N:
B= np.expand_dims(B,x)
>>> np.concatenate((A,B),axis=N-1)
ありがとう!それははるかに良いです。それでも、私が探していたのは、新しい形状の明示的な構築を避ける解決策でした。 'vstack'と' dstack'は、2次元配列と3次元配列に対してのみ行います。 – Miguel