numpy - 在另一个更大的数组中插入 3D 数组的值的最佳方法

标签 numpy array-broadcasting

必须有一些“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

one 3D array inside another

最佳答案

对于 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 的“缺失”维度。无论如何,您可能希望避免在这些情况下调用该函数,或者调整该函数以确保它在这些情况下可以执行您想要的操作。

关于numpy - 在另一个更大的数组中插入 3D 数组的值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005391/

相关文章:

python - 在 Windows 上部署 Python 程序并获取大型库依赖项

python - 如何使用 setuptools 安装 scipy 和 numpy

python - 在 Numpy 中执行 `A[tuple(B.T)]` 的更快方法

python - 从邻接表计算邻接矩阵的花式索引

python - numpy 中 ogrid 的 dtype 是否可以指定?

numpy - `np.dot` 剩余轴上没有笛卡尔积

python - sympy 的高级索引?

python - 将 N 个点放入 M 个相等的箱子中

python - 如何使 numpy.cumsum 在第一个值之后开始

python - 无法直接应用网格网格来创建 Surfaceplot