Вычисление условного среднего столбца двумерного массива - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок в Python.У меня есть 2D np.array (например, 50 строк и 12 столбцов), и мне нужно среднее значение 3-го столбца, когда 1-й столбец == x и 9-й столбец == y.Я не могу понять, как это сделать без использования ifs ...

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Вы можете использовать np.where():

x = 1
y = 2
a[np.where((a[:, 0] == x) & (a[:, 8] == y)), 3].mean() 
0 голосов
/ 27 сентября 2018

Я решил проблему следующим образом (спасибо Kasrâmvd):

mask1 = arr[:, 0] == x  # 1st column==x
mask1 = arr[:, 8] == y  # 9th column==y

final_mask = np.logical_and(mask1, mask2)

filtered_arr = arr[final_mask,:]
mean_3rd_column = filtered_arr[:,2].mean()
0 голосов
/ 27 сентября 2018

Предположим, ваш массив называется arr.В этом случае вы хотите применить два разных фильтра: первый 1st column==x, второй 9th column==y.Для начала вы должны создать каждый фильтр (маску) отдельно, а затем посмотреть, что вы хотите с ними сделать с точки зрения логической связи между ними и ожидаемым результатом.

mask1 = arr[:, 0] == x  # 1st column==x
mask1 = arr[:, 8] == y  # 9th column==y

Теперь вы можете использовать or, and или любой другой логический оператор для создания вашей конечной маски, которая в данном случае это and.Для этого в numpy вы можете использовать логические функции.

final_mask = np.logical_and(mask1, mask2)

И, наконец, все, что вам нужно, это отфильтровать массив на основе final_mask и выполнить вычисления, которые вы намеревались сделать:

filtered_3rd_column = arr[:, final_mask]
_mean = filtered_3rd_column.mean()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...