求解非负最小二乘p‌r‌o‌b‌l‌e‌m“xA=b”

2024-06-10 18:00:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到“xA=b”的非负最小二乘解。我很高兴答案是Python、Matlab或R

A是6*10矩阵,b是8192*10矩阵。在

我发现了一些函数:least_squares和{}在Python中,和{}在Matlab中。在

nnls和{}仅用于Ax=b。在

我对least_squares的实现给出了一个错误:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

from scipy.optimize import least_squares

spec=pd.read_csv('spec.csv',sep=',',header=None)
y=pd.read_csv('y.csv',sep=',',header=None)

spec=np.array(spec).T
y=np.array(y)

spec=spec[(0,1,2,3,4,5,6,9),:]
y=y[(0,1,2,3,4,5,6,9),:]

print(spec.shape,y.shape)

def fun(a, x, y):
    return a*x-y

a0=np.ones((8192,6))
a=least_squares(fun, a0, args=(y.T[:,0], spec.T[:,0]),
                           bounds=([np.zeros((8192,6)),
                           np.ones((8192,6))*np.inf]))

runfile('C:/Users/Documents/lsq.py', wdir='C:/Users/Documents') (8, 8192) (8, 6) Traceback (most recent call last):

File "", line 1, in runfile('C:/Users/wangm/Documents/lsq.py', wdir='C:/Users/Documents')

File "C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile execfile(filename, namespace)

File "C:\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 89, in execfile exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/Documents/lsq.py", line 30, in np.ones((8192,6))*np.inf]))

File "C:\Anaconda3\lib\site-packages\scipy\optimize_lsq\least_squares.py", line 742, in least_squares raise ValueError("x0 must have at most 1 dimension.")

ValueError: x0 must have at most 1 dimension.


Tags: csvinpyimportasnplineusers
1条回答
网友
1楼 · 发布于 2024-06-10 18:00:58

这是一个非常常见的矩阵问题,您可以在Matlab中使用^{}在一个字符内完成。在

从文件中:

mrdivide, /: Solve systems of linear equations xA = B for x

% Option 1, shorthand:
x = B/A;
% Option 2, longhand:
x = mrdivide(B,A);

相关问题 更多 >