Я пытаюсь сделать программу быстрее, и я нашел сообщение , и я хочу реализовать решение, напоминающее четвертый случай, приведенный в этом вопросе.
Вот соответствующая часть кода, который я использую:
count = 0
hist_dat = np.zeros(r**2)
points = np.zeros((r**2, 2))
for a in range(r):
for b in range(r):
for i in range(N):
for j in range(N):
hist_dat[count] += retval(a/r, (a+1)/r, data_a[i][j])*retval(b/r, (b+1)/r, data_b[i][j])/N
points[count][0], points[count][1] = (a+0.5)/r, (b+0.5)/r
count += 1
Этот код генерирует значения нормализованной двумерной гистограммы (с делениями "r" в каждом направлении) и координаты для этих значений как numpy.ndarray
.
Как вы можете видеть в другом связанном вопросе, в настоящее время я использую второе худшее из возможных решений, и для его запуска требуется несколько минут.
Для начала я хочу изменить то, что код делает для массива points
(я думаю, что, как только я увижу, как это делается, я смог бы кое-что выяснить для hist_dat
). Что в основном так:
В конкретном случае, над которым я работаю, A
и B
одинаковы. Так, например, это может быть как переход от array([0, 0.5, 1])
к array([[0,0], [0,0.5], [0,1], [0.5,0], [0.5,0.5], [0.5,1], [1,0], [1,0.5], [1,1]])
Существует ли какой-либо метод для numpy.ndarray
или операция с np.arange()
, которая выполняет то, что показано на приведенной выше диаграмме, не требуя for
циклов?
Или есть какая-нибудь альтернатива, которая может сделать это так же быстро, как показано в связанном посте для np.arange()
?