Numpy 和线性代数:如何在不丢失形状的情况下过滤数组

问题描述 投票:0回答:0

我正在实施 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]]

python numpy linear-algebra
© www.soinside.com 2019 - 2024. All rights reserved.