1. 에러 화면
return _lsap_module.calculate_assignment(cost_matrix)
ValueError: matrix contains invalid numeric entries
2. 발생 원인
matrix에 숫자가 아닌 elements가 존재해서 발생, 주로 어떤 수를 0으로 나눠서 발생(NaN 값 생성)하는 에러로 보여짐
GitHub의 issue에 올라온 버그 논의
3. 발생 위치
본인의 파이썬(아나콘다) 라이브러리 중, scipy의 설치경로(.../pythonX.X/site-packages/scipy/optimize
) 폴더의 _lsap.py
파일 혹은 linear assignment.py
파일
4. 해결 방법
파일에 NaN 값을 피하기 위해, 임의의 아주 큰 값으로 대체하는 아래 코드의 21(nan = np.isnan~~~
) ~ 24(cost_matrix[np.isnan~~~
) line을 추가
.
. (생략)
.
def linear_sum_assignment(cost_matrix, maximize=False):
"""Solve the linear sum assignment problem.
.
. (생략)
.
Examples
--------
>>> cost = np.array([[4, 1, 3], [2, 0, 5], [3, 2, 2]])
>>> from scipy.optimize import linear_sum_assignment
>>> row_ind, col_ind = linear_sum_assignment(cost)
>>> col_ind
array([1, 0, 2])
>>> cost[row_ind, col_ind].sum()
5
"""
cost_matrix = np.asarray(cost_matrix)
nan = np.isnan(cost_matrix).any()
if nan:
INFTY_COST = 1e+5
cost_matrix[np.isnan(cost_matrix)] = INFTY_COST
if cost_matrix.ndim != 2:
raise ValueError("expected a matrix (2-D array), got a %r array"
% (cost_matrix.shape,))
.
. (생략)
.