- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在网上找到了一些示例,展示了如何在 Python 中查找正则矩阵的零空间,但我找不到任何关于稀疏矩阵 (scipy.sparse.csr_matrix
) 的示例。
零空间是指 x 使得 M·x = 0,其中 ' ·'是矩阵乘法。有人知道怎么做这个吗?
此外,在我的例子中,我知道零空间将由一个向量组成。这些信息可以用来提高方法的效率吗?
câu trả lời hay nhất
这还不是一个完整的答案,但希望它能成为一个起点。您应该能够使用针对密集矩阵显示的基于 SVD 的方法的变体来计算零空间 in this question :
nhập numpy dưới dạng np
from scipy import sparse
import scipy.sparse.linalg
def rand_rank_k(n, k, **kwargs):
"generate a random (n, n) sparse matrix of rank <= k"
a = sparse.rand(n, k, **kwargs)
b = sparse.rand(k, n, **kwargs)
return a.dot(b)
# I couldn't think of a simple way to generate a random sparse matrix with known
# rank, so I'm currently using a dense matrix for proof of concept
n = 100
M = rand_rank_k(n, n - 1, density=1)
# # this seems like it ought to work, but it doesn't
# u, s, vh = sparse.linalg.svds(M, k=1, which='SM')
# this works OK, but obviously converting your matrix to dense and computing all
# of the singular values/vectors is probably not feasible for large sparse matrices
u, s, vh = np.linalg.svd(M.todense(), full_matrices=False)
tol = np.finfo(M.dtype).eps * M.nnz
null_space = vh.compress(s <= tol, axis=0).conj().T
print(null_space.shape)
# (100, 1)
print(np.allclose(M.dot(null_space), 0))
# ĐÚNG VẬY
如果您知道 x 是单行向量,那么原则上您只需要计算 Tôi 的最小奇异值/向量。应该可以使用 scipy.sparse.linalg.svds
来做到这一点,即:
u, s, vh = sparse.linalg.svds(M, k=1, which='SM')
null_space = vh.conj().ravel()
不幸的是,scipy 的 svds
seems to be badly behaved当找到奇异或接近奇异矩阵的小奇异值时,通常返回 NaN 或抛出 ArpackNoConvergence
错误。
我目前不知道使用 Python 绑定(bind)的截断 SVD 的替代实现可以在稀疏矩阵上工作并且可以有选择地找到最小的奇异值 - 也许其他人知道一个?
作为旁注,第二种方法似乎使用 MATLAB 或 Octave 的 svds
工作得相当好功能:
>> M = rand(100, 99) * rand(99, 100);
% svds converges much more reliably if you set sigma to something small but nonzero
>> [U, S, V] = svds(M, 1, 1E-9);
>> max(abs(M * V))
ans = 1.5293e-10
关于python - 我如何计算零空间/内核 (x : M·x = 0) of a sparse matrix in Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33410146/
Tôi rất quan tâm đến nhân Linux và hệ điều hành nói chung. Điều tôi muốn biết là loại tệp hoặc phần mở rộng của kernel là gì? Rõ ràng là nó không có phần mở rộng .exe hoặc .out, vì chúng được sử dụng cho các ứng dụng được cài đặt trên hệ điều hành. Hạt nhân chỉ là một hệ nhị phân
Tôi cần thêm lệnh gọi hệ thống riêng vào nhân Raspbian Linux. Bây giờ tôi bị mắc kẹt sau khi tìm kiếm khoảng 2 ngày để tìm giải pháp. Để thêm một cuộc gọi hệ thống, về cơ bản tôi đã làm theo phác thảo ( http://elinux.org
Đối với một dự án học thuật, tôi muốn thêm một tệp nguồn (myfile.c) vào thư mục kernel/, cùng thư mục với exit.c và fork.c. Hệ thống xây dựng dường như không tự động nhận tệp mới vì Tôi đang ở trong hàm được xác định bởi myfile.c
Bảng xếp hạng trình duyệt Bảng xếp hạng thị phần trình duyệt Bảng xếp hạng toàn cầu. Danh sách xếp hạng thị phần trình duyệt tại Trung Quốc - Kuai Technology. Nếu chúng ta nhìn vào lõi trình duyệt, thị phần cốt lõi của Chrome chắc chắn là lớn nhất, với một công ty đang thống trị thị trường.
Với cấu trúc tác vụ cho một tiến trình hoặc luồng, thành ngữ lặp lại trên tất cả các luồng khác thuộc cùng một tiến trình là gì? Câu trả lời hay nhất Linux không phân biệt giữa tiến trình (tác vụ) và luồng. Thư viện gọi fork() và pthread_create() sử dụng cùng một hệ thống
Tôi đang tạo kernel từ đầu trong C (không phải linux. Hoàn toàn từ đầu) và tôi đang gặp một số vấn đề. Tôi có mã này: #include "timer.h" int ms = 0; void time_handler(
Tôi đang tạo hạt nhân C từ đầu và tôi thực sự chỉ sao chép mã này từ một trang web và tôi bối rối vì mã của tôi không hoạt động. void kmain(void) { const char *str = "f của tôi
Tôi không chắc liệu mình có hiểu hết sự khác biệt ở trên hay không, vì vậy tôi sẽ tự giải thích và bạn có thể ngắt lời tôi nếu tôi sai: "Nhân là đoạn mã đầu tiên tạo ra một luồng nhân. Một luồng nhân là một tiến trình được quản lý bởi người dùng Một luồng là một phần của tiến trình nếu bạn có một tiến trình đơn luồng.
Hãy xem định nghĩa tệp cấu trúc từ mã này nhân Linux phiên bản 2.6.18. Tôi đang cố gắng so sánh hai biến tệp cấu trúc trong mã của mình và xác định xem chúng có tham chiếu đến cùng một tệp hay không. trong cấu trúc này
Tôi đang cố gắng làm cho đèn LED trong thiết bị nhúng nhấp nháy khi Linux khởi động. Về cơ bản, đèn LED nhấp nháy cho biết Linux đang khởi động. Để làm cho đèn LED nhấp nháy, tôi thực hiện như sau.
Tôi có một số phần cứng cụ thể chạy trên FreeBSD và Linux. Tôi phải tạo một ứng dụng không gian người dùng sẽ hoạt động với trình điều khiển sử dụng bộ nhớ dùng chung giữa ứng dụng kernel/không gian người dùng. Ứng dụng của tôi đang bận trên bộ nhớ dùng chung từ không gian người dùng
Tôi có thể tìm lời giải thích về các chức năng tương ứng trong nhân linux ở đâu, đặc biệt là đối với ICMPv4? Ví dụ: icmp_reply, icmp_send, v.v. Cảm ơn sự giúp đỡ của bạn. Hay nhất, câu trả lời hay nhất của Alimu để khám phá nhân Linux
Tôi đang làm việc trên Linux Kernel 3.4 và tôi có đoạn mã sau: /* Giá trị hiệu chỉnh cảm biến tiệm cận */ unsigned int als_kadc;
Tôi đang đọc "Phát triển hạt nhân Linux phiên bản thứ 3 của Robert Love" để có cái nhìn tổng quan về cách hoạt động của nhân Linux.. (2.6.2.3) Tôi không hiểu cách hoạt động của hàng đợi chờ, chẳng hạn như việc tạo đoạn văn này
Tôi đã từng hỏi câu hỏi tương tự trước đây nhưng bài đăng của tôi đã bị xóa vì lý do nào đó. Dù sao, tôi đang cố gắng sử dụng C++ và viết một chương trình cho phép tôi truy cập trực tiếp vào bộ nhớ và ghi vào nó. Tôi nghe nói rằng tôi cần phải làm gì đó với kernel vì nó là liên kết giữa hệ điều hành và ứng dụng
Trong khi cố gắng tìm hiểu các phương thức thực thi của Ruby, tôi tìm thấy bài đăng trên blog này về năm cách để chạy các lệnh trong Ruby http://mentalized.net/journal/2010/03/08/5_ways_to_run
Có bản phân phối Linux nào (ngoài Minix) có tài liệu mã nguồn tốt không? Ngoài ra, có tài liệu nào hay mô tả mã nguồn Linux nói chung không? Tôi đã tải xuống mã nguồn hạt nhân, nhưng (không có gì đáng ngạc nhiên) tôi hơi choáng ngợp và muốn biết liệu có mã nguồn nào không?
Có ai biết hàm hoặc tệp nào trong linux chứa thuật toán tìm cổng ngẫu nhiên cho lệnh gọi hệ thống bind() không? Tôi đã tìm khắp nơi và không thể tìm ra cách đưa thuật toán này vào mã nguồn Linux. Cảm ơn bạn! Câu trả lời hay nhất Đây là một đoạn mã dài và phức tạp,
Lời nói đầu Trước hết, độc giả có trình độ chuyên môn có thể bỏ qua loạt bài này. Mục đích chính của những bài viết này là giúp những độc giả không chuyên về khoa học hiểu được kiến thức cơ bản thông qua những tóm tắt đơn giản, dễ hiểu, đồng thời hiểu rõ hơn lý do tại sao những vấn đề cơ bản này lại được đưa vào các cuộc phỏng vấn. Nếu không, một số khái niệm sẽ luôn
Sự khác biệt và tính năng giữa CentOS7.2 và CentOS6 Quá trình khởi động hệ điều hành Linux trước tiên bắt đầu từ BIOS, sau đó vào bộ tải khởi động, tải kernel và khởi chạy kernel. Hạt nhân được khởi tạo
Tôi là một lập trình viên xuất sắc, rất giỏi!