Я пытаюсь найти быстрый способ заполнить массив Numpy симметричными значениями вращения. Представьте себе массив нулей, имеющих конусообразную область. У меня есть 1D массив значений и вы хотите повернуть его на 360 ° вокруг центра массива. Нет никакой двумерной функции, такой как z = f (x, y), поэтому я не могу рассчитать двумерные значения явно. У меня есть что-то, что работает, но for-loop слишком медленный для больших массивов. Это должно сделать круг:заполните массив Numpy с осесимметричными значениями
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]
Мой массив 1D, конечно, не так прост. Может ли кто-нибудь подумать о способе избавиться от цикла?
Обновление: Я хочу создать круговой фильтр для сверточного размытия. Прежде чем я использовал np.outer(values,values)
, который дал мне прямоугольный фильтр. Подсказка Давида позволяет мне создавать круговой фильтр очень быстро. Смотрите ниже:
circular filter with David's answer
Работает отлично, спасибо кучу! Для значений float нужно сделать arr float dtype. –