Passing Matrix using call by reference
古いコメントを表示
When looking for call-by-reference in matlab I found the Handle-Class. What I don't yet understand is how I use that class on a matrix so that I can pass a reference of the matrix and not the matrix itself.
I know matlab already kind of does this with large matrices, but firstly, I don't know how big my matrices will become, and secondly, I want to make sure it is only with reference, since it is done very often and is a performance critical operation.
Thank you.
採用された回答
その他の回答 (4 件)
Jos (10584)
2013 年 12 月 10 日
Yes, using assignin and input name will do that for you
function myfun(varargin)
assignin('caller',inputname(1),2)
>> test = 'hallo'
test =
hallo
>> myfun(test)
>> test
test =
2
Sean de Wolski
2013 年 12 月 10 日
編集済み: Sean de Wolski
2013 年 12 月 10 日
What operation are you doing inside of myfunc? Is it elementwise?
If so, MATLAB will do the operation in place if x is named the same everywhere:
x = magic(10);
x = myfunc(x);
%%
function x = myfunc(x)
x = x.^2;
end
Since the operation is being done in-place, no memory copy will be necessary.
Jos (10584)
2013 年 12 月 10 日
Matlab does not create a copy, until it is really needed. So passing big arrays to functions uses no extra memory, except when you change the big matrix inside the function.
function myfun1(X)
Y = X ; No copy is made, Y is a pointer (a reference to X)
X(1) = 1 % this creates a copy of X inside the workspace of the function. Note that Y is untouched.
Y(1) = 1 ; % this now also creates a copy
2 件のコメント
Daniel
2013 年 12 月 10 日
編集済み: Sean de Wolski
2013 年 12 月 10 日
Jos (10584)
2013 年 12 月 10 日
編集済み: Jos (10584)
2013 年 12 月 10 日
OK. Yes, it is possible. See my second answer.
sixwwwwww
2013 年 12 月 10 日
Define you function as below:
function y = myFunc(x)
y = 2;
end
then try this in command window:
x = 1;
x = myFunc(x);
It will return you value 2 which you need
カテゴリ
ヘルプ センター および File Exchange で Data Type Identification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!