- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我找到了一个 liên kết其中显示了一个示例,当线性方程组有无限多个解时,Matlab mldivide
运算符 (\
) 给出“特殊”解。
Ví dụ:
A = [1 2 0; 0 4 3];
b = [8; 18];
c_mldivide = A \ b
c_pinv = pinv(A) * b
给出输出:
c_mldivide =
0
4
0.66666666666667
c_pinv =
0.918032786885245
3.54098360655738
1.27868852459016
在解决方案 c_mldivide
中非零项的数量等于 rank(A)
的意义上,该解决方案是“特殊的”(在本例中为 2 ).我使用 numpy.linalg.lstsq
在 numpy 中尝试了同样的事情,它给出了与 c_pinv
相同的结果。
有没有办法在 Python 中实现 c_mldivide
解决方案?
还有一个非常相似的问题đây ,但我想对“特殊”一词的解释还不够清楚。 Another question询问了 mldivide
运算符的内部工作原理,但公认的答案似乎并未解决此行为。
编辑 1:số lượng lớn
mã số
In [149]: test_A = np.array([[1,2,0],[0,4,3]])
test_b = np.array([[8],[18]])
np.linalg.lstsq(test_A,test_b)
Out[149]:
(array([[ 0.918 ],
[ 3.541 ],
[ 1.2787]]), array([], dtype=float64), 2, array([ 5.2732, 1.4811]))
编辑 2:使用 scipy.optimize.nnls
In[189]:
from scipy.optimize import nnls
nnls(test_A,test_b)
Out[190]:
ValueError Traceback (most recent call last)
in ()
1 from scipy.optimize import nnls
2
----> 3 nnls(test_A,test_b)
C:\Users\abhishek\Anaconda\lib\site-packages\scipy\optimize\nnls.py in nnls(A, b)
43 raise ValueError("expected matrix")
44 if len(b.shape) != 1:
---> 45 raise ValueError("expected vector")
46
47 m, n = A.shape
ValueError: expected vector
câu trả lời hay nhất
非负最小二乘法 ( scipy.optimize.nnls
) KHÔNG此问题的通用解决方案。如果所有可能的解决方案都包含负系数,那么它会失败的一个简单情况是:
nhập numpy dưới dạng np
from scipy.optimize import nnls
A = np.array([[1, 2, 0],
[0, 4, 3]])
b = np.array([-1, -2])
print(nnls(A, b))
# (array([ 0., 0., 0.]), 2.23606797749979)
hiện hữu A·x = b 未定的情况下,
x1, res, rnk, s = np.linalg.lstsq(A, b)
将选择一个解决方案 x' 最小化 ||x||L2 受 ||A·x - b||L2 = 0。这恰好不是我们正在寻找的特定解决方案,但我们可以对其进行线性变换以获得我们想要的结果。为此,我们将首先计算 right null spacecủa MỘT,表征 A·x = 的所有可能解的空间b。我们可以使用 rank-revealing QR decomposition 得到它:
from scipy.linalg import qr
def qr_null(A, tol=None):
Q, R, P = qr(A.T, mode='full', pivoting=True)
tol = np.finfo(R.dtype).eps if tol is None else tol
rnk = min(A.shape) - np.abs(np.diag(R))[::-1].searchsorted(tol)
return Q[:, rnk:].conj()
Z = qr_null(A)
VỚI 是一个向量(或者,在 n - rnk(MỘT) > 1 的情况下,一组跨越 MỘT 的子空间的基向量,使得 A·Z = 0:
print(A.dot(Z))
# [[ 0.00000000e+00]
# [ 8.88178420e-16]]
换句话说,VỚI 的列是与 MỘT 中的所有行正交的向量 。这意味着对于 x' đến A·x = b ,然后 x' = x + VỚI·c 也必须是任意比例因子 c 的解。这意味着通过选择适当的 c 值,我们可以将解中的任意 n - rnk(MỘT) 系数设置为零.
例如,假设我们想将最后一个系数的值设置为零:
c = -x1[-1] / Z[-1, 0]
x2 = x1 + Z * c
print(x2)
# [ -8.32667268e-17 -5.00000000e-01 0.00000000e+00]
print(A.dot(x2))
# [-1. -2.]
n - rnk(MỘT) ≤ 1 的更一般情况稍微复杂一些:
A = np.array([[1, 4, 9, 6, 9, 2, 7],
[6, 3, 8, 5, 2, 7, 6],
[7, 4, 5, 7, 6, 3, 2],
[5, 2, 7, 4, 7, 5, 4],
[9, 3, 8, 6, 7, 3, 1]])
x_exact = np.array([ 1, 2, -1, -2, 5, 0, 0])
b = A.dot(x_exact)
print(b)
# [33, 4, 26, 29, 30]
我们像以前一样得到 x' Và VỚI:
x1, res, rnk, s = np.linalg.lstsq(A, b)
Z = qr_null(A)
现在为了最大化解向量中零值系数的数量,我们想要找到一个向量 C 使得
x' = x + Z·C = [x'0, x'1, ..., x'rnk(A)-1, 0, ..., 0]T
nếu như x' 中的最后一个 n - rnk(MỘT) 系数为零,则此强加于此
VỚI{rnk(A),...,n}·C = -x{rnk(A),...,n}
因此我们可以求解 C(准确地说,因为我们知道 Z[rnk:]
必须是满秩):
C = np.linalg.solve(Z[rnk:], -x1[rnk:])
并计算 x' :
x2 = x1 + Z.dot(C)
print(x2)
# [ 1.00000000e+00 2.00000000e+00 -1.00000000e+00 -2.00000000e+00
# 5.00000000e+00 5.55111512e-17 0.00000000e+00]
print(A.dot(x2))
# [ 33. 4. 26. 29. 30.]
将它们整合到一个函数中:
nhập numpy dưới dạng np
from scipy.linalg import qr
def solve_minnonzero(A, b):
x1, res, rnk, s = np.linalg.lstsq(A, b)
if rnk == A.shape[1]:
return x1 # nothing more to do if A is full-rank
Q, R, P = qr(A.T, mode='full', pivoting=True)
Z = Q[:, rnk:].conj()
C = np.linalg.solve(Z[rnk:], -x1[rnk:])
return x1 + Z.dot(C)
关于python - 如何获得与 Matlab 的 'special' (mldivide) 运算符使用 numpy/scipy 返回的欠定线性系统相同的 `A\b` 解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33614378/
Tôi có mã này: System.err.print("number of terms = "); System.out.println(allTerms.size()); System.err
Tôi gặp sự cố sau: Tôi phải thực hiện các hành động khác nhau khi HĐH là Linux và khi HĐH là MacO. Vì vậy, tôi đã tạo mục tiêu tập lệnh Ant sau: /u
Tôi đang gọi system("bash ../tools/bashScript\"This is anargument!\"&") và sau đó tôi đang gọi close(socketFD) trực tiếp trên hệ thống
Việc ràng buộc các phần tử liên tiếp của một mảng ngẫu nhiên bằng cách sử dụng các phần tử ngẫu nhiên được tạo ban đầu là hợp lệ. Ví dụ: Tôi muốn tạo một tập hợp gồm 10 cặp addr,size để mô phỏng quy trình cấp phát bộ nhớ điển hình và có lớp sau: class abc rand bit[5:0;
Tôi đang tạo một ứng dụng phải sử dụng các hàm system(const char*) để thực hiện một số "việc nặng" và tôi cần có khả năng cung cấp cho người dùng phần trăm tiến độ sơ bộ. Ví dụ: nếu hệ điều hành đang di chuyển tệp cho bạn, nó sẽ cung cấp cho bạn một thanh tiến trình,
Tôi sắp viết một số tiêu chuẩn/hướng dẫn và mẫu mà người quản lý dự án, nhà phát triển và nhà phân tích kinh doanh sẽ sử dụng. Mục đích là để hiểu rõ hơn về các giải pháp đang được phát triển hoặc đã được phát triển. Một phần của việc này là cung cấp các tiêu chuẩn/hướng dẫn về các giải pháp ghi chép. Ví dụ. Ghi lại giải pháp/đáp ứng trường hợp kinh doanh/nhu cầu của người dùng
Khi phát triển một ứng dụng sử dụng chỉ mục đĩa nén hoặc tệp đĩa, trong đó các phần của chỉ mục hoặc tệp được truy cập liên tục (vì mục đích tranh luận, giả sử điều gì đó giống như bản phân phối Zipfian), tôi muốn biết khi nào là đủ/tốt hơn để dựa vào về hoạt động Bộ đệm cấp hệ thống (ví dụ: Debia
Chúng tôi đã viết một tập lệnh powershell xử lý hình ảnh từ hệ thống nội bộ và gửi chúng đến một hệ thống khác. Bây giờ, một bộ phận khác của doanh nghiệp muốn tham gia, tự xử lý dữ liệu và chuyển nó sang hệ thống khác. Sau khi hỏi thăm xung quanh, có một số người xung quanh công ty
Tôi đang cố gắng kiểm tra ứng dụng của mình nhưng tôi gặp phải lỗi sau: System.Web.HttpUnhandledException: Một ngoại lệ của loại 'System.Web.HttpUnhandledException' đã bị ném
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Các câu hỏi yêu cầu chúng tôi giới thiệu hoặc tìm các công cụ, thư viện hoặc tài nguyên yêu thích bên ngoài trang web đều không có chủ đề đối với Stack Overflow.
Vì vậy, tôi không gặp lỗi này trong các chương trình khác, nhưng tôi gặp lỗi này trong chương trình này. Chương trình này là một ví dụ mà tôi không gặp lỗi. #include int main() { system("pause"); } // vi
Tôi gặp sự cố với System.URI.FormatExption trong c# Để rõ ràng, tôi đang sử dụng phương pháp Matlab của Segseuil và nó trả về kết quả đường dẫn hình ảnh. Tôi muốn lưu cái này cho những người dùng khác
Tôi đang cố gắng đặt màu nền của hộp văn bản như thế này: txtCompanyName.BackColor = Draw.Color.WhiteSmoke; Nó không thích vì nó muốn tôi thêm hệ thống ở phía trước, ví dụ: txtCo;
Vui lòng giúp tôi giải quyết System.StackOverflowException Tôi muốn ghi bản ghi vào cơ sở dữ liệu bằng .aspx Tôi đang sử dụng kiến trúc 4 tầng để đạt được điều này, mọi thứ đều hoạt động tốt nhưng khi tôi biên dịch trang thì nó hiển thị các trường để chèn dữ liệu và khi tôi đặt dữ liệu
Tôi đang sử dụng một số API thường được hệ thống gọi. Vì vậy, tôi đã thêm android:sharedUserId="android.uid.system" vào tệp kê khai và sử dụng Android từ GIT
Tôi đang cố gắng tạo một ứng dụng nhỏ yêu cầu quyền truy cập đọc/ghi vào thư mục/hệ thống (nó đang cố xóa một tệp và tạo một tệp mới vào vị trí của nó). Tôi có thể kết nối lại thư mục đó mà không gặp vấn đề gì khi sử dụng adb và nếu tôi làm điều này, ứng dụng của tôi sẽ
Tôi muốn kết nối lại /system dưới dạng RW từ ứng dụng riêng tư của hệ thống mà không có su. Làm cách nào tôi có thể thực hiện việc này theo chương trình? Bạn sẽ chỉ sử dụng Runtime.getruntime().exec() để thực thi lệnh shell phải không?
Tôi đang cố gắng tạo một chương trình với hệ thống đăng nhập. Tôi chưa quen với điều này nhưng tôi đã làm việc liên tục 8 giờ để tìm ra điều này. Đây là mã lỗi tôi nhận được + ServerVersion 'con.ServerVersion' đã ném
Khi tôi "xây dựng và chạy" chương trình trong Code::Blocks, nó chạy hoàn toàn bình thường! Nhưng khi tôi chạy thủ công từ thư mục "/bin", khi nó cố gọi "temp.bat" bằng system() , thì nó sẽ thiết lập lại. tại sao vậy? nó không
Tôi muốn sử dụng lệnh hệ thống/ống để thực thi lệnh với các ký tự đặc biệt. Dưới đây là mã mẫu. Sau khi thực hiện lệnh thông qua hệ thống/ống, nó sẽ thay đổi lệnh bằng cách thay đổi các ký tự đặc biệt. Tôi rất ngạc nhiên khi thấy lệnh hệ thống đang thay đổi văn bản được truyền dưới dạng lệnh. chạy(ch
Tôi là một lập trình viên xuất sắc, rất giỏi!