В настоящее время у меня возникает следующая проблема, учитывая массив, скажем для простоты, массив 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]
, так что, зная шаг моего "окна", я могу получить доступ к своим подмассивам, проиндексировав основную матрицу.