Как мне найти минимум матовой матрицы? (В данном конкретном случае) - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть пустая матрица следующим образом

[['- A B C D E']
['A 0 2 3 4 5']
['B 2 0 3 4 5']
['C 3 3 0 4 5']
['D 4 4 4 0 5']
['E 5 5 5 5 0']]

Как мне найти минимум в этой матрице вместе с индексом этого минимума, исключая все нули при рассмотрении минимума?

Я пробовал несколько методов, которые я видел в Интернете, но я почти всегда получал бы следующую ошибку: TypeError: cannot perform reduce with flexible type


Буду признателен за любые новые решения, которые я смогу попробовать и проверить, работает ли он?

1 Ответ

2 голосов
/ 04 апреля 2019

Вам нужно вернуться на чертежную доску с вашей «пустой» матрицей, которая является не матрицей, а списком списка (одной) строки.

x =['- A B C D E',
'A 0 2 3 4 5',
'B 2 0 3 4 5',
'C 3 3 0 4 5',
'D 4 4 4 0 5',
'E 5 5 5 5 0']

# Preprocess this matrix to make it a matrix
x = [e.split() for e in x]
numbers = set("0123456789")
xr = [[float(e) if all(c in numbers for c in e) and e != "0" else float("inf") for e in l] for l in x]

Все, что не числоили 0 помечен как float (inf), чтобы не мешать вычислению минимума:

[[inf, inf, inf, inf, inf, inf],
 [inf, inf, 2.0, 3.0, 4.0, 5.0],
 [inf, 2.0, inf, 3.0, 4.0, 5.0],
 [inf, 3.0, 3.0, inf, 4.0, 5.0],
 [inf, 4.0, 4.0, 4.0, inf, 5.0],
 [inf, 5.0, 5.0, 5.0, 5.0, inf]]

Вы можете легко использовать numpy's argmin и unravel_index, чтобы получить то, что вы хотите.

xrn = np.array(xr)
index = np.unravel_index(np.argmin(xrn), xrn.shape)

# RESULT: (1, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...