必须有一些’
pythonic’方法来做到这一点,但我不认为np.place,np.insert或np.put是我正在寻找的.我想将较大的3D阵列A中的值替换为较小的3D阵列B的值,从较大的阵列中的位置[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案例.
如果您想要在原始帖子中提到的“嵌入”功能,对于任意数量的维度的数组,以下内容应该有效:
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的那个),或者我可以想象有人想要small_array广播以填充big_array的剩余部分以获取small_array的“缺失”维度.无论如何,您可能希望避免在这些情况下调用函数,或者调整函数以确保在这些情况下它会执行您想要的操作.