2013-07-18 45 views
6

Tôi đang làm việc trong một chương trình phân tích Hệ thống nguồn và tôi cần làm việc với ma trận thưa thớt.Thêm giá trị vào ma trận thưa thớt Scipy với chỉ mục và giá trị

Có một thói quen mà tôi điền vào một ma trận thưa thớt chỉ với các cuộc gọi sau đây:

self.A = bsr_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

Như ma trận này sẽ không thay đổi theo thời gian. Tuy nhiên, một ma trận khác thay đổi theo thời gian và tôi cần phải cập nhật nó. Có cách nào mà có, ví dụ:

co  = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 

tôi có thể thêm những để một ma trận thưa thớt khởi tạo trước đó? Làm thế nào sẽ là cách nhiều hơn để làm điều đó?

Cảm ơn bạn

Trả lời

3

Bạn nên sử dụng một coo_matrix thay vào đó, nơi bạn có thể thay đổi các thuộc tính col, rowdata của một ma trận thưa thớt tạo ra trước đó:

from scipy.sparse import coo_matrix 
nele=30 
nbus=40 
col = [ 2, 3, 6] 
row = [ 5, 5, 5] 
val = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j] 
test = coo_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex) 

print test.col 
#[2 3 6] 
print test.row 
#[5 5 5] 
print test.data 
#[ 0.1+0.1j 0.1-0.2j 0.1-0.4j] 
+0

Cảm ơn bạn. Tôi đọc trong tài liệu: _Bởi mặc định khi chuyển sang định dạng CSR hoặc CSC, các mục trùng lặp (i, j) sẽ được tổng hợp lại với nhau. Điều này tạo điều kiện xây dựng hiệu quả các ma trận phần tử hữu hạn và tương tự. (xem ví dụ) _ Điều đó càng ít giải quyết được vấn đề mà tôi có. Trong mã của tôi, có một số đối tượng đóng góp cho ma trận này và hai đối tượng có thể đóng góp cho cùng một mục nhập (i, j). Điều này có nghĩa là mỗi khi tôi muốn thêm đóng góp của một đối tượng, tôi phải xây dựng lại ma trận? – amalbe

+0

hi ... vâng, bạn có thể sử dụng các đối tượng khác nhau để xây dựng ma trận chỉ bằng cách gán tham số 'col' và' row' cho 'coo_matrix'. Tôi không chắc chắn liệu 'SciPy' sẽ tạo hay không phải là bản sao nội bộ khi xây dựng ma trận thưa thớt –

Các vấn đề liên quan