Расчет площади радиолокационной диаграммы с течением времени путем объединения нескольких массивов в PythonPython

Программы на Python
Anonymous
Расчет площади радиолокационной диаграммы с течением времени путем объединения нескольких массивов в Python

Сообщение Anonymous »

Предположим, у меня есть массив, содержащий оценки для n символов за t дней. У меня есть еще несколько массивов той же формы (t, n), содержащих разные типы оценок для тех же n символов. Для конкретности предположим, что у меня есть 5 оценок, т. е. 5 массивов формы (t, n). Индивидуальные оценки (каждый из которых нормализован от 0 до 100) будут меняться со временем, и моя цель — создать составную оценку, используя область радиолокационной диаграммы из пяти оценок для каждого персонажа в день. (К вашему сведению: площадь многоугольника рассчитывается путем сначала присвоения полярных координат для каждого балла (score_value, theta), преобразования их в координаты (x, y), а затем использования стандартной формулы. ) Окончательный результат, содержащий области, также должен представлять собой массив (t, n).
Моя первоначальная идея заключалась в том, чтобы объединить 5 оценок в массив формы (t, n, 5) достигается с помощью np.dstack. Не уверен, что это хорошая идея. Вот что у меня есть на данный момент:

Код: Выделить всё

import numpy as np

# Random data for demonstration
mat_1 = np.ones((20, 10))
mat_2 = np.ones((20, 10))
mat_3 = np.ones((20, 10))
mat_4 = np.ones((20, 10))
mat_5 = np.ones((20, 10))

matrix = [mat_1, mat_2, mat_3, mat_4]

my_list = np.dstack(matrix)

def radar_plot_area(data):
num_vars = len(data)

# Compute angle for each axis
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False)

# Calculate area using shoelace formula
x = [r * np.cos(a) for r, a in zip(data, angles)]
y = [r * np.sin(a) for r, a in zip(data, angles)]
area = 0.5 * np.abs(np.sum(x * np.roll(y, -1)) - np.sum(x * np.roll(y, 1)))

return area

# Create output matrix
areas_matrix = np.zeros((20, 10))

for i in range(20):
for j in range(10):
areas_matrix[i][j] = radar_plot_area(my_list[i][j])

print(areas_matrix)
Я вижу, что он выводит правильные значения для области в конце, но у меня возникли проблемы с его обобщением для работы с большими массивами. В идеале я бы предпочел работать с массивами полностью, без необходимости слишком часто явно ссылаться на индексы, т. е. я хочу иметь следующую функцию:

Код: Выделить всё

def radar_plot_area(*scores: np.array): #the inputs are the 5 scores (which are arrays) I mentioned
...
return area #output is a (t, n) matrix containing the areas for each character per day
Есть ли лучший способ добиться того, что я описываю? Любые предложения будут высоко оценены.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -arrays-in

Вернуться в «Python»