gpt4 book ai didi

python - 使用掩码的 Scipy NNLS

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:26 27 4
gpt4 key购买 nike

我正在使用 scipy 执行非负最小二乘法。一个简单的例子如下:

import numpy as np
from scipy.optimize import nnls

A = np.array([[60, 70, 120, 60],[60, 90, 120, 70]], dtype='float32')
b = np.array([6, 5])
x, res = nnls(A, b)

现在,我遇到的情况是 Ab 中的某些条目可能会丢失 (np.NaN)。比如,

A_2 = A.copy()
A_2[0,2] = np.NaN

当然,在 A_2、b 上运行 NNLS 将不起作用,因为 scipy 不需要 infnan

我们如何执行 NNLS,从计算中屏蔽掉丢失的条目。实际上,这应该转化为

Minimize |(A_2.x- b)[mask]|

其中掩码可以定义为:

mask = ~np.isnan(A_2)

一般来说,Ab 中都可能缺少条目。

可能有帮助:

[1] How to include constraint to Scipy NNLS function solution so that it sums to 1

最佳答案

我认为您可以先计算掩码(确定要包含哪些点),然后执行 NNLS。给定面具

In []: mask
Out[]:
array([[ True, True, False, True],
[ True, True, True, True]], dtype=bool)

您可以通过沿第一个轴使用 np.all 检查列中的所有值是否为 True 来验证是否包含点。

In []: np.all(mask, axis=0)
Out[]: array([ True, True, False, True], dtype=bool)

然后可以将其用作 A 的列掩码。

In []: nnls(A_2[:,np.all(mask, axis=0)], b)
Out[]: (array([ 0.09166667, 0. , 0. ]), 0.7071067811865482)

同样的想法可以用于b来构造行掩码。

关于python - 使用掩码的 Scipy NNLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42923858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com