Я пытаюсь найти быстрый способ заполнить массив Numpy симметричными значениями вращения. Представьте массив нулей, содержащий область в форме конуса. У меня есть одномерный массив значений, и я хочу повернуть его на 360° вокруг центра массива. Нет 2D-функции, такой как z=f(x,y), поэтому я не могу явно вычислить 2D-значения. У меня есть кое-что, что работает, но цикл for слишком медленный для больших массивов. Это должно сделать круг:
values = np.ones(100)
x = np.arange(values.size)-values.size/2+0.5
y = values.size/2-0.5-np.arange(values.size)
x,y = np.meshgrid(x,y)
grid = np.rint(np.sqrt(x**2+y**2))
arr = np.zeros_like(grid)
for i in np.arange(values.size/2):
arr[grid==i] = values[i+values.size/2]
Мой одномерный массив, конечно, не такой простой. Может ли кто-нибудь придумать способ избавиться от цикла for?
Обновление: я хочу сделать круговой фильтр для сверточного размытия. Раньше я использовал np.outer(values,values)
, который давал мне прямоугольный фильтр. Подсказка Дэвида позволяет мне очень быстро создать круговой фильтр. Смотри ниже: