我有以下形式的矩陣:
import numpy as np
matrix = np.array([[-2,2,6,7,8],[-3,7,1,0,-2]])
我想以第二行中的非負數為條件,在第一行中找到具有最高可能值的列的位置,例如,在我的情況下,我希望演算法找到第 4 行。
solution = np.array([7,0])
column_location = 3
我嘗試使用 numpy 函式,np.min(), np.max(),np.take()但在對矩陣進行二次采樣時丟失了位置資訊。
uj5u.com熱心網友回復:
簡單地:
nn = np.where(matrix[1] >= 0)[0]
ix = nn[matrix[0, nn].argmax()]
在您的資料上:
>>> ix
3
uj5u.com熱心網友回復:
這是一個草圖:
pos_inds = np.where(matrix[1, :] >= 0)[0] # indices where 2nd row is positive
max_ind = matrix[0, pos_inds].argmax() # max index into row with positive values only
orig_max_ind = pos_inds[max_ind] # max index into the original array
print(orig_max_ind) # 3
print(matrix[:, orig_max_ind]) # [7, 0]
uj5u.com熱心網友回復:
這里我使用掩碼來處理numpy,并且還考慮到如果第二列中的所有數字都是負數,那么將沒有解決方案:
import numpy as np
import numpy.ma as ma
from copy import deepcopy
min_int = -2147483648
matrix = np.array([[-2, 2, 6, 7, 8], [-3, 7, 1, 0, -2]])
# we keep the original matrix untouched
matrix_copy = deepcopy(matrix)
masked_array = ma.masked_less(matrix[1], 0)
matrix_copy[0][masked_array.mask] = min_int
column_location = np.argmax(matrix_copy[0])
if matrix_copy[0][column_location] == min_int:
print("No solution")
else:
solution = np.array([matrix[0][column_location], matrix[1][column_location]])
print(solution) # np.array([7,0])
print(column_location) # 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473677.html
下一篇:不能將序列乘以非整數
