使用numpy数组循环使用一定大小的较小矩阵遍历n x n矩阵



>我目前遇到以下问题,给定一个数组,为了简单起见,假设一个 4 x 4 数组(我实际上正在使用 512 x 512 )

X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])

我想以一种可以将新数组保存为表单的方式循环/滑动数组

np.array([3,5],[7,6]), np.array([2,4], [8,8]), np.array([1,6],[2,1]), np.array ([7,7],[1,4])等等(理想情况下,我可以选择"滑动"窗口的步骤和大小)。我也想根据一些条件选择这些数组,见下文。

目前,我设法通过切片(参见代码)我的矩阵来做几乎所有事情。这给出了我想要的步骤的正确切片,然后通过使用itertools模块,我可以遍历我的所有列表列表,计算小于某个值的元素并保存它们。 我不能做的是将所有这些新列表之间的索引链接到主矩阵。 出于这个原因,我正在考虑将所有内容移动到numpy数组中,这些数组(在我的理解中)在计算方面应该更有效率,我想应该解决我的索引问题。现在唯一的问题是我不知道为任意n x n矩阵解决这个问题。

X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])
width = len(m[0])
height = len(m)
height = 2  # size of the matrix sliding
width = 2
for i in range(0, height - slice_y + 1,2):
for j in range(0, width - slice_x + 1,2):
Appended.append(
[
[m[a][b] for b in range(j, j + slice_x)]
for a in range(i, i + slice_y)
]
)

理想情况下,我想要的是通用矩阵 N x N,但目前也只想在示例中将输出作为数组的形式获取,例如:

np.array([3,5],[7,6]) .  np.array ([2,4], [8,8])  ,  np.array  ([1,6],[2,1]),   np.array ([7,7],[1,4])

假设一旦发现数组np.array([2,4], [8,8])有两个大于7的元素,并且总和大于20以保存该数组相对于我的初始矩阵的坐标。因此,保存索引会X[0][2]X[0][3]X[1][2]X[1][3]或至少是前X[0][2]耦合,因此通过了解我的"窗口"的步骤,我可以通过索引我的主矩阵来访问我的子数组。

你显然可以直接对 numpy 数组进行切片

X = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7],
[2, 1, 3, 4]])[0:2,0:2]

在您的情况下,我会生成您将要使用的子矩阵边缘的索引列表。然后使用它来生成子矩阵列表,然后使用它来生成基于子矩阵的真值或假值列表。然后,您可以使用该真/假值列表来修剪初始指示列表。您也可以在不存储子矩阵的情况下执行此操作。

indicies= [((i,i+s_width),(j,j+s_height)) for i in range(0,width-s_width) for j in range(0,height-s_height)]

相关内容

  • 没有找到相关文章

最新更新