Как выбрать строку с наибольшим количеством минимальных значений из каждого столбца из матрицы в Python? - PullRequest
1 голос
/ 22 июня 2019

Предположим, у меня есть 2D-список с именем arr

arr=[[0.2, 0.4, 0.5, 0.3],[0.4, 0.3, 0.6, 0.7],[0.3, 0.5, 0.9, 0.4]]

. Теперь я хочу вернуть строку с наибольшим количеством минимальных значений по сравнению с каждым столбцом, что в данном случае будет arr [0].

[0.2, 0.4, 0.5, 0.3]

Как мне сделать это, используя чистый питон или numpy?

Ответы [ 2 ]

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

Для фиксированного количества элементов в подсписке , мы можем использовать NumPy следующим образом -

In [53]: arr[np.bincount(np.argmin(arr,axis=0)).argmax()]
Out[53]: [0.2, 0.4, 0.5, 0.3]

В качестве альтернативы, мы также можем использовать SciPy, чтобы получить наибольшее количество шагов, например:

In [45]: from scipy import stats

In [46]: arr[stats.mode(np.argmin(arr,axis=0))[0][0]]
Out[46]: [0.2, 0.4, 0.5, 0.3]
2 голосов
/ 22 июня 2019

Есть определенно более чистые решения, но это работает:

arr=[[0.2, 0.4, 0.5, 0.3],[0.4, 0.3, 0.6, 0.7],[0.3, 0.5, 0.9, 0.4]]

#list of min count of each array 
counts=[0] * len(arr)
#iterate over all values
for i in range (len(arr[0])):
  minwhere=0 #position min value
  val=arr[0][i] #current min value
  for j in range (1, len(arr)): #iterate over other arrays
    if val > arr[j][i]: #compare for min
      minwhere=j #update index array min
      val=arr[j][i] #update value min
  counts[minwhere]=counts[minwhere]+1 #add one to array with min


print (arr[counts.index(max(counts))]) #get arr with max number of min
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...