gpt4 book ai didi

python - 如何将一个数组插入到另一个只有零的数组中(使用 Numpy)

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:00 25 4
gpt4 key购买 nike

我在 NumPy 中有两个矩阵。一个比另一个大。我想将较小的二维数组(随机)插入较大的二维数组,其中只有零(因此较大数组中的实际信息不会丢失)。示例:

大数组:

[0 0 0 9] 
[0 0 0 7]
[0 0 0 2]
[2 3 1 5]

小数组:

[3 3]
[3 3]

(可能的)结果:

[3 3 0 9] 
[3 3 0 7]
[0 0 0 2]
[2 3 1 5]

最佳答案

我认为您可以使用二维卷积来找到小数组 b 可以进入大数组 a 的位置。如果您将 scipy.signal.convolve2dmode='valid' 一起使用,您只会获得小数组“适合”的位置。我认为使用数组的 abs 可以绕过正值和负值(在任一数组中)取消,但我还没有非常严格地测试过这些。

这是我所做的,使用@CypherX 的fill_a_with_b 函数进行填充步骤:

import numpy as np
import scipy.signal

# Your input data.
a = np.array([[0, 0, 0, 9],
[0, 0, 0, 7],
[0, 0, 0, 2],
[2, 3, 1, 5]])
b = np.ones((2, 2)) * 3

# Find places where b can go.
allowed = scipy.signal.convolve2d(np.abs(a), np.abs(b), mode='valid')

# Get these locations as (row, col) pairs.
coords = np.stack(np.where(allowed==0)).T

# Choose one of the locations at random.
choice = coords[np.random.randint(coords.shape[0])]

# Use @CypherX's 'fill' function.
def fill_a_with_b(a, b, pos=[0, 0]):
aa = a.copy()
aa[slice(pos[0], pos[0] + b.shape[0]),
slice(pos[1], pos[1] + b.shape[1])] = b.copy()
return aa

# Do the fill thing.
fill_a_with_b(a, b, choice)

这导致(例如)...

array([[0, 0, 0, 9],
[0, 3, 3, 7],
[0, 3, 3, 2],
[2, 3, 1, 5]])

关于python - 如何将一个数组插入到另一个只有零的数组中(使用 Numpy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57878713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com