2010-08-06 32 views
13

A có cấu trúc với bốn ma trận rất lớn tương ứng với hình ảnh thang độ xám. Tùy thuộc vào đầu vào của hàm của tôi, tôi muốn lưu trữ một trong bốn ma trận đó trong một biến. Tuy nhiên, vì những ma trận đó rất lớn, tôi không muốn tạo một bản sao của chúng.Có thể lấy tham chiếu đến ma trận trong Matlab không?

Có điều gì tương tự trong Matlab với khái niệm tham chiếu trong C++ không? Hay nói cách khác: liệu có thể có hai biến trỏ tới cùng một ma trận?

Trả lời

18

Matlab sử dụng "lazy copy on write" cho các biến. Điều đó có nghĩa là nếu bạn chuyển mảng của bạn (hoặc tất cả chúng) vào hàm của bạn, chúng sẽ không bị trùng lặp trừ khi bạn viết vào mảng (s). Nói cách khác, bạn có thể không cần phải làm những gì bạn muốn làm.

Ví dụ: nếu bạn lưu trữ hình ảnh của mình theo cấu trúc imgStruct với các trường firstImage đến fourthImage và bạn vượt qua ví dụ: imgStruct.fourthImage làm đầu vào cho hàm, mảng không bị trùng lặp, ngay cả khi nó được gọi là ví dụ: inputImage bên trong hàm.

Nếu bạn định ghi vào hình ảnh, bạn có thể tạo handle class để lưu trữ dữ liệu hình ảnh, được chuyển theo tham chiếu (do đó, nếu bạn sửa đổi hình ảnh bên trong hàm, nó cũng được sửa đổi trong không gian làm việc cơ sở của bạn) .

+6

để biết ví dụ chi tiết về những gì xảy ra đằng sau hiện trường (sao chép trên ghi), hãy tham khảo bài đăng này: http://stackoverflow.com/questions/1735841/initializing-a-ublas-vector-from-ac- mảng/1735997 # 1735997 – Amro

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