У меня есть пустой массив, подобный следующему:
A = np.array([[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 5, 1, 1, 1],
[1, 1, 1, 1, 3, 3, 1, 1],
[1, 1, 1, 1, 1, 1, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 4, 1, 1]])
Я ищу минимальные индексы в каждом столбце. Я нашел это, используя numpy.argmin
следующим образом:
I = np.zeros(A.shape[1], dtype=np.int64)
for j in range(A.shape[1]):
I[j] = np.argmin(A[:, j])
Это дает мне I = [0, 0, 0, 0, 0, 0, 0, 0]
. Поскольку есть связи, я мог бы получить следующее: I = [0, 1, 2, 3, 4, 0, 5, 1]
, где я разрываю связи по индексу, который меньше всего используется (из предыдущих индексов).
Более подробно:
- Для
j=0
у нас есть np.argmin(A[:, 0]) in [0, 1, 2, 3, 4, 5]
и, скажем, мы выбираем np.argmin(A[:, 0]) = 0
.
- Для
j=1
у нас есть np.argmin(A[:, 1]) in [0, 1, 2, 3, 4, 5]
, и мы должны выбрать минимальный индекс из [1, 2, 3, 4, 5]
, так как эти индексы используются наименее (мы уже выбираем np.argmin(A[:, 0]) = 0
для j=0
). Скажем, мы выбираем np.argmin(A[:, 1])=1
.
- Для
j=2
у нас есть np.argmin(A[:, 2]) in [0, 1, 2, 3, 4, 5]
, и мы должны выбрать минимальный индекс из [2, 3, 4, 5]
, так как эти индексы используются наименее.
- Мы продолжаем в том же духе ...
- Для
j=5
у нас есть np.argmin(A[:, 5]) in [0, 1, 3, 4]
, и мы должны выбрать минимальный индекс из [0, 1, 3, 4]
, так как эти индексы используются наименее. Скажем, мы выбираем np.argmin(A[:, 5])=0
.
- Для
j=6
у нас есть np.argmin(A[:, 6]) in [0, 1, 2, 4, 5]
, и мы должны выбрать из [5]
, так как эти индексы используются наименее. Мы выбираем np.argmin(A[:, 6])=5
.
- Для
j=7
у нас есть np.argmin(A[:, 7]) in [0, 1, 2, 3, 4, 5]
, и мы должны выбрать из [1, 2, 3, 4, 5]
, так как эти индексы используются наименее. Скажем, мы выбираем np.argmin(A[:, 7])=1
.
Надеюсь, это понятно. Мой вопрос: как найти минимальные индексы и разорвать связи по наименее используемым индексам в Python?