Предполагая, что a
является массивом NumPy, вы можете использовать это:
new_a = a - np.min(a, axis=1)[:,None]
Попробуйте:
import numpy as np
a = np.arange(24).reshape((4,6))
print (a)
new_a = a - np.min(a, axis=1)[:,None]
print (new_a)
Результат:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1 2 3 4 5]]
Обратите внимание, что np.min(a, axis=1)
возвращает 1-мерный массив минимальных значений по строкам.
Затем мы добавляем в него дополнительное измерение, используя [:,None]
.Затем он выглядит как этот 2d массив:
array([[ 0],
[ 6],
[12],
[18]])
Когда этот 2d массив участвует в вычитании, он транслируется в форму (4,6)
, которая выглядит следующим образом:
array([[ 0, 0, 0, 0, 0, 0],
[ 6, 6, 6, 6, 6, 6],
[12, 12, 12, 12, 12, 12],
[18, 18, 18, 18, 18, 18]])
Теперь поэлементное вычитание происходит между двумя (4,6)
массивами.