| | """Gen triple-set from a matrix.""" |
| | from typing import List, Tuple, Union |
| |
|
| | import numpy as np |
| | import pandas as pd |
| |
|
| |
|
| | |
| | def cmat2tset( |
| | cmat1: Union[List[List[float]], np.ndarray, pd.DataFrame], |
| | |
| | |
| | ) -> np.ndarray: |
| | |
| | """Gen triple-set from a matrix. |
| | |
| | Args |
| | cmat: 2d-array or list, correlation or other metric matrix |
| | # thirdcol: bool, whether to output a third column (max value) |
| | |
| | Returns |
| | Obtain the max and argmax for each column, erase the row afterwards to eliminate one single row that would dominate |
| | every column. |
| | """ |
| | |
| | cmat = np.array(cmat1) |
| |
|
| | if not np.prod(cmat.shape): |
| | raise SystemError("data not 2d...") |
| |
|
| | _ = """ |
| | # y00 = range(cmat.shape[1]) # cmat.shape[0] long time wasting bug |
| | |
| | yargmax = cmat.argmax(axis=0) |
| | if thirdcol: |
| | ymax = cmat.max(axis=0) |
| | |
| | res = [*zip(y00, yargmax, ymax)] # type: ignore |
| | # to unzip |
| | # a, b, c = zip(*res) |
| | |
| | return res |
| | |
| | _ = [*zip(y00, yargmax)] # type: ignore |
| | return _ |
| | """ |
| | low_ = cmat.min() - 1 |
| | argmax_max = [] |
| | src_len, tgt_len = cmat.shape |
| | for _ in range(min(src_len, tgt_len)): |
| | argmax = int(cmat.argmax()) |
| | row, col = divmod(argmax, tgt_len) |
| | argmax_max.append([col, row, cmat.max()]) |
| |
|
| | |
| | cmat[row, :] = low_ |
| | cmat[:, col] = low_ |
| |
|
| | return np.array(argmax_max) |
| |
|