6

これを行うには「pythonic」な方法が必要ですが、、、、または私が探しているものnp.placeではないと思います。大きな配列の位置から始めて、大きな 3D 配列内の値を小さな 3D 配列の値に置き換えたいです。図面を参照してください:np.insertnp.putAB[i,j,k]

A[i+, j+, k+] = B、またはnp.embed(B, A, (i,j,k))のようなものを入力したいのですが、もちろんそれらは正しくありません。

編集:ああ、これがあります。したがって、質問を変更して、これが最善の方法であるかどうかを尋ねる必要があります (「最良」とは、ラップトップで 500x500x50 の浮動小数点数の配列が最速であることを意味します)。

s0, s1, s2 = B.shape
A[i:i+s0, j:j+s1, k:k+s2] = B

別の 3D 配列内の 1 つの 3D 配列

4

1 に答える 1

2

編集した回答は、3D ケースでは問題ないようです。

元の投稿で言及した「埋め込み」関数が必要な場合は、任意の数の次元の配列に対して、次のように機能する必要があります。

def embed( small_array, big_array, big_index):
    """Overwrites values in big_array starting at big_index with those in small_array"""
    slices = [np.s_[i:i+j] for i,j in zip(big_index, small_array.shape)]
    big_array[slices]=small_array

big_array の次元数が small_array の次元数よりも多い場合に、どのように「埋め込み」を実行したいかは明らかではないことに注意してください。たとえば、small_array メンバーから big_array の上書きされたメンバーへの 1:1 マッピングを望む人を想像できます (small_array に長さ 1 の次元を追加して、その ndim を big_array の ndim に引き上げることに相当します)。 small_array の「欠落した」次元について、big_array の残りを埋めるためにブロードキャストします。とにかく、そのような場合に関数を呼び出さないようにするか、関数を微調整して、そのような場合に必要なことが確実に行われるようにすることをお勧めします。

于 2016-04-12T06:02:31.270 に答える