2016-10-31 2 views
1

У меня есть массив под названием meanRSS 8 * 720, и я хочу увидеть минимальное значение в каждом столбце и вычесть это значение из других элементов этого столбца. Я хочу сделать это для каждого столбца.Поиск минимального значения в каждом столбце массива 8 * 720?

meanRSS.shape = (8720)

minInds = meanRSS.argsort()

Я не знаю, как действовать после этого. Я новичок в python.

Out[13]: 
array([[5, 2, 1], 
    [6, 4, 3], 
    [1, 6, 8], 
    [8, 5, 4]]) 
In [14]: minInds = a.argsort() 
In [15]: minInds 
Out[15]: 
array([[2, 1, 0], 
    [2, 1, 0], 
    [0, 1, 2], 
    [2, 1, 0]]) 

Но я хочу, чтобы это отсортировано по столбцам, а не по строкам.

ответ

2

Вы можете использовать метод min() в массиве с axis = 0, чтобы выяснить, вектор минимумов столбцов, а затем вычесть его из исходного массива:

arr - arr.min(axis = 0) 

#array([[4, 0, 0], 
#  [5, 2, 2], 
#  [0, 4, 7], 
#  [7, 3, 3]]) 
+0

большое спасибо. Но будет ли эта строка работать для моего массива 8 * 720 или мне нужно использовать цикл for для вычисления этого для каждого столбца в нем? – JUBER

+0

Он должен работать для 2D-массива (матрицы) независимо от того, каким будет измерение. – Psidom

0

вы также можете попробовать что-то вроде транспонировать матрицу, вычитая min val от всех больших значений в столбце и перенос обратно. например

>>> transpose = lambda matrix: list(map(list, zip(*matrix))) 
>>> col_min_min = lambda col: [(val-min(col) if val !=min(col) else val) for val in col] 
>>> 
>>> a = [[1, 2, 3], [2, 3, 4], [3, 4, 5]] 
>>> result = transpose([col_min_min(col) for col in transpose(a)]) 
>>> print result 
[[1, 2, 3], [1, 1, 1], [2, 2, 2]]