我正在实施 mca 算法作为学习练习。我的目标是遍历矩阵并迭代地“关闭”行和列。
为此,我创建了一个选择器函数。
def minors(A):
'''Creates a boolean list of selector arrays.
Positional arguments
----------
A: array-like
An array or array like representing a matrix
Returns
--------
selectors: list
A list of boolean arrays corresponding to the selectors
'''
A = np.array(A)
selectors = []
for r, row in enumerate(A):
for c, coef in enumerate(row):
selector = np.ones(A.shape, dtype=bool)
selector[r] = 0
selector[0:len(row), c] = 0
selectors.append(selector)
return selectors
对于 3x3 矩阵,此函数将返回从以下位置开始的数组列表:
[
[False, False, False],
[False, True, True],
[False, True, True]
]
结束于:
[
[ True, True, False],
[True, True, False],
[False, False, False]
]
如果我应用
A[selector]
我将从 A 中获得所需的选择,但数组失去了它的形状(它变平了)。例如,将第一个选择器应用于 3x3 矩阵会产生 [a22, a23, a32, a33]
for a in A.
有没有办法在保持数组形状的同时做到这一点,这样将第一个选择器应用于 A 会产生
[[a22, a23], [a32, a33]]
?