Найдите минимальное значение в элементе столбца в массиве numpy и сохраните соответствующую строку как новый массив - PullRequest
0 голосов
/ 20 ноября 2019

У меня есть числовой массив, как показано ниже, и я хотел бы создать новый числовой массив, в котором есть строка с минимальным значением в последнем столбце, который является элементом xx[:,4].

xx =
[[6.18167195e-02 -3.20902583e-01  7.96803103e+00   5.69096614e+00  6.82949858e+00]
[1.14139479e-02 -2.93352490e-02  5.17031336e+00   2.50552347e+01  1.51127740e+01]
[8.84761009e-03 -2.93352490e-02  1.84764173e+01   2.50552347e+01  2.17658260e+01]
[1.96567549e-03 -2.93352490e-02  8.18878876e+01   2.50552347e+01  5.34715612e+01]
[3.54827629e-01 -1.88511194e+00  4.70728062e-01   1.95791971e-01  3.33260017e-01]
[3.53146766e-01 -1.88511194e+00  9.42210619e-01   1.95791971e-01  5.69001295e-01]
[6.64244146e-02 -3.20902583e-01  1.10815151e+00   5.69096614e+00  3.39955882e+00]
[6.18167195e-02 -3.20902583e-01  7.96803103e+00   5.69096614e+00  6.82949858e+00]
[1.95005819e-02 -1.40482917e-01  2.64188251e+00   1.63546768e+00  2.13867510e+00]
...
...]

Я знаю, что мы можем использовать np.min(xx[:,4]), чтобы получить 3.33260017e-01 в последнем столбце. Тем не менее, мне нужно извлечь все значения в соответствующей строке, которая будет этой

[3.54827629e-01 -1.88511194e+00 4.70728062e-01 1.95791971e-01 3.33260017e-01].

В многомерном массиве, таком как xx.shape = (1000,4), как я могу получить расположение элементов минимального значения?

У меня вопрос любой из них.

  1. Создайте новый массив NumPy только со строкой с минимальным значением в последнем столбце.

  2. Удалите все строки, кроме строки с минимальным значением в последнем столбце. колонка.

Ответы [ 3 ]

2 голосов
/ 20 ноября 2019

argmin даст вам индекс с минимальным значением.

>>> xx=np.array([[2,1,3],[1,0,2],[3,3,1]])
>>> xx
array([[2, 1, 3],
       [1, 0, 2],
       [3, 3, 1]])
>>> column = 1
>>> i = xx[:,column].argmin()
1
>>> xx[i,:]  # get the row where column 1 has the minimum
array([1, 0, 2])
1 голос
/ 20 ноября 2019

Одно решение:

>>> import numpy as np
>>>
>>> xx = [[6.18167195e-02,-3.20902583e-01,7.96803103e+00,5.69096614e+00,6.82949858e+00],
... [1.14139479e-02,-2.93352490e-02,5.17031336e+00,2.50552347e+01,1.51127740e+01],
... [8.84761009e-03,-2.93352490e-02,1.84764173e+01,2.50552347e+01,2.17658260e+01],
... [1.96567549e-03,-2.93352490e-02,8.18878876e+01,2.50552347e+01,5.34715612e+01],
... [3.54827629e-0,-1.88511194e+00,4.70728062e-01,1.95791971e-01,3.33260017e-01],
... [3.53146766e-01,-1.88511194e+00,9.42210619e-01,1.95791971e-01,5.69001295e-01],
... [6.64244146e-02,-3.20902583e-01,1.10815151e+00,5.69096614e+00,3.39955882e+00],
... [6.18167195e-02,-3.20902583e-01,7.96803103e+00,5.69096614e+00,6.82949858e+00],
... [1.95005819e-02,-1.40482917e-01,2.64188251e+00,1.63546768e+00,2.13867510e+00]]
>>>
>>> xx = np.asarray(xx)
>>>
>>> def MinRow(array):
...     low = np.min(array[:,4])
...     for idx, el in enumerate(array):
...         if el[-1] <= low:
...             index = idx
...     newarray = array[index, :]
...     return newarray
...
>>> xx2 = MinRow(xx)
>>> print(xx2)
[ 3.54827629 -1.88511194  0.47072806  0.19579197  0.33326002]

Чистое решение Numpy:

>>> import numpy as np
>>>
>>> xx = [[6.18167195e-02,-3.20902583e-01,7.96803103e+00,5.69096614e+00,6.82949858e+00],
... [1.14139479e-02,-2.93352490e-02,5.17031336e+00,2.50552347e+01,1.51127740e+01],
... [8.84761009e-03,-2.93352490e-02,1.84764173e+01,2.50552347e+01,2.17658260e+01],
... [1.96567549e-03,-2.93352490e-02,8.18878876e+01,2.50552347e+01,5.34715612e+01],
... [3.54827629e-0,-1.88511194e+00,4.70728062e-01,1.95791971e-01,3.33260017e-01],
... [3.53146766e-01,-1.88511194e+00,9.42210619e-01,1.95791971e-01,5.69001295e-01],
... [6.64244146e-02,-3.20902583e-01,1.10815151e+00,5.69096614e+00,3.39955882e+00],
... [6.18167195e-02,-3.20902583e-01,7.96803103e+00,5.69096614e+00,6.82949858e+00],
... [1.95005819e-02,-1.40482917e-01,2.64188251e+00,1.63546768e+00,2.13867510e+00]]
>>>
>>> xx = np.asarray(xx)
>>> idx = np.where(xx[:,4]==np.min(xx[:,4]))
>>> xx2 = xx[idx]
>>> print(xx2)
[[ 3.54827629 -1.88511194  0.47072806  0.19579197  0.33326002]]
1 голос
/ 20 ноября 2019

Ты почти у цели, хочешь np.where

idx = np.where(xx[:, -1] == np.min(xx[:,4]))
output = xx[idx]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...