枚举 two-dimensional 数组的区域并与它们交互
Enumerating regions of a two-dimensional array and interacting with them
我有两个 two-dimensional 大小为 1501x780 的数组 res1、res2。
我必须从它们中取出切片,用函数处理这些切片并将结果添加到数组中。
res1 上的切片从 (0,0)
开始,一直到 (100,100)
。 (尺寸100x100)固定不动。
res2 数组的第二个切片也从 (0,0)
开始并在 (100,100)
结束。
我们得到2个切片并使用一定的公式计算出该值,并将该值添加到结果数组中。
然后,使用固定的res1切片,我们将res2的值更改为(0,1),(100,101)
。也就是说,我们将切片向右移动一个像素,使其保持在相同的高度。我们做所有相同的操作。然后我们再次向右移动(0,2),(100,102)
。等等 100 个元素。也就是说,最多 (0,100)(100,200)
。
然后我们将它向下移动一个像素,(1.0)(0.100)
。
而且我们还 运行 从 (1,0...100)
到 (1,0...200)
移动 (2,0),(2,100)
以此类推,直到 (100,100),(200,200)
。
res1 的切片在这一切中保持不变。
结果,应获得结果 two-dimensional 元素数组 ...
非常感谢 Robin De Schepper 的帮助,我知道如何与切片交互,但我没有这样描述我的任务。而且,如果您将第二个循环 for j in range(100) 添加到其函数中,那么我看不出如何 运行 通过我需要的切片值,以及如何将计算结果输入到一个 two-dimensional 数组,因为声明在结果之前 = [[]] 并没有像我想象的那样工作。
出于某种原因,当我描述我的问题并并行思考时,我得出的结论是这是不可能实现的。
要通过对输入数组 res1
和 res2
的 (size_x, size_y)
切片执行 operation
来获得结果的 (x, y)
矩阵,您可以使用嵌套 for 循环和 numpy
:
import numpy as np
def operation(a, b):
return a + b
res1 = np.array(res1)
res2 = np.array(res2)
x = 100
y = 100
size_x = 100
size_y = 100
start_x = 0
start_y = 0
results = np.empty((x, y))
for i in range(x):
for j in range(y):
slice1 = res1[(start_x + i):(start_x + i + size_x), (start_y + j):(start_y + j + size_y)]
slice2 = res2[(start_x + i):(start_x + i + size_x), (start_y + j):(start_y + j + size_y)]
results[i, j] = operation(slice1, slice2)
可能有更聪明的 numpy
方法
我有两个 two-dimensional 大小为 1501x780 的数组 res1、res2。
我必须从它们中取出切片,用函数处理这些切片并将结果添加到数组中。
res1 上的切片从 (0,0)
开始,一直到 (100,100)
。 (尺寸100x100)固定不动。
res2 数组的第二个切片也从 (0,0)
开始并在 (100,100)
结束。
我们得到2个切片并使用一定的公式计算出该值,并将该值添加到结果数组中。
然后,使用固定的res1切片,我们将res2的值更改为(0,1),(100,101)
。也就是说,我们将切片向右移动一个像素,使其保持在相同的高度。我们做所有相同的操作。然后我们再次向右移动(0,2),(100,102)
。等等 100 个元素。也就是说,最多 (0,100)(100,200)
。
然后我们将它向下移动一个像素,(1.0)(0.100)
。
而且我们还 运行 从 (1,0...100)
到 (1,0...200)
移动 (2,0),(2,100)
以此类推,直到 (100,100),(200,200)
。
res1 的切片在这一切中保持不变。
结果,应获得结果 two-dimensional 元素数组 ...
非常感谢 Robin De Schepper 的帮助,我知道如何与切片交互,但我没有这样描述我的任务。而且,如果您将第二个循环 for j in range(100) 添加到其函数中,那么我看不出如何 运行 通过我需要的切片值,以及如何将计算结果输入到一个 two-dimensional 数组,因为声明在结果之前 = [[]] 并没有像我想象的那样工作。
出于某种原因,当我描述我的问题并并行思考时,我得出的结论是这是不可能实现的。
要通过对输入数组 res1
和 res2
的 (size_x, size_y)
切片执行 operation
来获得结果的 (x, y)
矩阵,您可以使用嵌套 for 循环和 numpy
:
import numpy as np
def operation(a, b):
return a + b
res1 = np.array(res1)
res2 = np.array(res2)
x = 100
y = 100
size_x = 100
size_y = 100
start_x = 0
start_y = 0
results = np.empty((x, y))
for i in range(x):
for j in range(y):
slice1 = res1[(start_x + i):(start_x + i + size_x), (start_y + j):(start_y + j + size_y)]
slice2 = res2[(start_x + i):(start_x + i + size_x), (start_y + j):(start_y + j + size_y)]
results[i, j] = operation(slice1, slice2)
可能有更聪明的 numpy
方法