Numpy 2d массив, отсечение каждого индекса каждой строки до минимума этого индекса и определенного столбца - PullRequest
1 голос
/ 26 июня 2019

Учитывая массив 2d, я хочу взять определенный столбец этого массива.

Затем я хочу взять каждое значение каждой строки в массиве и изменить это значение на любое минимальное значение между еготекущее значение и значение в указанном столбце для этой строки :.

Как эффективный способ сделать это?Спасибо.

Вот пример:

Учитывая матрицу 3x3:

array([[1, 2, 1],
       [2, 2, 8],
       [3, 7, 11]])

И выбранный столбец = столбец 2

array([2, 2, 7])

Для каждого значения в матрице я беру минимум между этим значением и значением в соответствующей строке выбранного столбца

= [1, 2, 1; 2, 2, 2; 3, 7, 7]

Как я могу эффективно сделать это для большой матрицы?Спасибо.

1 Ответ

2 голосов
/ 26 июня 2019

Используйте numpy.minimum.Вам необходимо выполнить трансляцию, чтобы сохранить размеры столбца, чтобы не сравнивать по строкам весь столбец.

np.minimum(a, a[:, col, None])

MCVE

a = np.array([[1, 3, 1, 9, 4],
              [2, 3, 7, 5, 5],
              [9, 8, 8, 4, 5],
              [6, 9, 5, 7, 9],
              [9, 9, 1, 9, 1]])

col = 2       # array([1, 7, 8, 5, 1])

np.minimum(a, a[:, col, None])

array([[1, 1, 1, 1, 1],
       [2, 3, 7, 5, 5],
       [8, 8, 8, 4, 5],
       [5, 5, 5, 5, 5],
       [1, 1, 1, 1, 1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...