2011-08-19 37 views
7

thể trùng lặp:
How can I change the values of multiple points in a matrix?Matlab: gán cho ma trận với cặp chỉ số cột hàng

Tôi có một ma trận A và ba vectơ có cùng chiều dài, r, giữ chỉ số của các hàng để gán cho, c, giữ chỉ mục của các cột để gán cho và v chứa các giá trị thực tế cần gán.

Điều tôi muốn nhận là A(r(i),c(i))==v(i) cho tất cả i. Nhưng làm

A(r,c)=v; 

Không mang lại kết quả đúng như matlab diễn giải nó như chọn tất cả các kết hợp có thể có của rc và gán giá trị cho nó, ví dụ

n=5; 
A=zeros(n); 
r=1:n; 
c=1:n; 

A(r,c)=1; 

sản lượng một ma trận của những người thân, nơi tôi muốn lấy ma trận nhận dạng vì tôi muốn A(r(i),c(i))==1 cho mỗi i, đó chỉ là các phần tử trên đường chéo sẽ bị ảnh hưởng.

Làm cách nào để đạt được kết quả mong muốn, mà không có vòng lặp for?

+0

tương tự câu hỏi: [Chuyển đổi một ma trận MATLAB để một vector ] (http://stackoverflow.com/questions/1931545/converting-a-matlab-matrix-to-a-vector) – Amro

+1

@Amro - Mặc dù tôi đồng ý câu trả lời cho cả hai câu hỏi rất giống nhau, các câu hỏi khác nhau - tôi muốn biết làm thế nào để gán cho một ma trận, trong khi câu hỏi khác muốn biết làm thế nào để bí mật một ma trận thành một vectơ. Người ta sẽ không đạt được câu hỏi khác khi tìm kiếm câu trả lời cho câu hỏi của tôi. – olamundo

+1

Tôi không bỏ phiếu cho bạn, tôi chỉ đơn giản là liên kết với câu hỏi khác là tương tự (trái ngược với bỏ phiếu để đóng bản sao) .. – Amro

Trả lời

13

OK, tôi đã tìm thấy câu trả lời - một trong những nhu cầu sử dụng chỉ mục tuyến tính, có nghĩa là chuyển đổi các cặp cột \ hàng vào một chỉ số duy nhất:

idx = sub2ind(size(A), r,c); 
A(idx)=v; 
Các vấn đề liên quan