python-3.x - 强制 NNLS 结果
问题描述
我正在使用 scipy.optimize.nnls 来计算系数总和为 1 的非负最小二乘拟合:
#! /usr/bin/env python3
import numpy as np
import scipy.optimize as soptimize
if __name__ == '__main__':
C = np.array([[112.771820, 174.429720, 312.175750, 97.348620],
[112.857010, 174.208300, 312.185270, 93.467580],
[114.897210, 175.661850, 314.275100, 99.015480]
]);
d = np.array([[112.7718, 174.4297, 312.1758, 97.3486]]);
for line in d:
ret , _= soptimize.nnls(C.T, line)
print(ret)
我得到:
[9.99992794e-01 7.27824399e-06 0.00000000e+00]
是否可以将某些结果列设置为 nnls 算法的特定值并强制它生成剩余的结果列?
例如,如果我的结果是:[0.3 0.3 0.4]。我想将第一列强制为 0.9,并且 nnls 应该生成其他列,如下所示:
[0.9 0.06 0.04]
任何帮助将不胜感激 !
解决方案
推荐阅读
- java - 如何为 ZoneRegion 实现 MongoDB 编解码器
- html - 有没有办法在没有 Git 的情况下从我的 Android 手机将静态站点部署到 Netlify?
- java - 将外部依赖的构造函数传递给 Guice 实现
- c# - 恢复/执行布局时出现 C# WindowsForm 错误
- php - 为什么 .htaccess 调用 index.php 而不是 search.php?
- python - 美丽的汤:提取两个标签之间的所有内容
- ruby - 将 Ruby 字符串转换为正确的日期和时间
- php - 尝试设置 PHP 命令行选项会产生奇怪的输出
- vue.js - 如何让我的 CSS 在 vuejs 中与 webpack 一起使用
- javascript - 如何使用 API 结果在 Dialogflow 中为 FB Messenger 创建轮播?(返回结果的数量是可变的)