Alternate form of eval function

4 ビュー (過去 30 日間)
Wiqas Ahmad
Wiqas Ahmad 2021 年 3 月 18 日
コメント済み: Wiqas Ahmad 2021 年 3 月 18 日
How can I write these two syntaxes in alternate from?
eval(['I',num2str(i),num2str(j),num2str(k),'=','getsiganl(filename1)',';']);
eval(['II',num2str(i),num2str(j),num2str(k),'=','smooth(sum(I',num2str(i),num2str(j),num2str(k),',2)',');']);
  1 件のコメント
Stephen23
Stephen23 2021 年 3 月 18 日
編集済み: Stephen23 2021 年 3 月 18 日
Rather than trying to use an "Alternate form of eval function", you should just write your code using much simpler and much more efficient indexing. Is there a particular reason why you cannot use indexing?

サインインしてコメントする。

採用された回答

Bjorn Gustavsson
Bjorn Gustavsson 2021 年 3 月 18 日
You'll have to learn good programming-habits and utilise the vectorized capabilities of matlab. This looks like a case where you might get away with multi-dimensional arrays - but that would require all your signals to have the same length. The safer option is to store all signals in a cell-array - there everything goes. Perhaps something like this:
I_all{i,j,k} = getsiganl(filename1);
I_all_smooth{i,j,k} = smooth(sum(I_all{i,j,k},2));
I would also suggest changing the indices i, j and k to i1, i2 and i3 - this makes me more comfortable when it comes to which order they should go in indexing and also leaves i and j for the imaginary constant.
HTH
  2 件のコメント
Wiqas Ahmad
Wiqas Ahmad 2021 年 3 月 18 日
編集済み: Wiqas Ahmad 2021 年 3 月 18 日
@Bjorn Gustavsson Thank you. This is really what I wanted

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2021 年 3 月 18 日
Why not simply
I(i,j,k)=getsiganl(filename1);
II(i,j,k)=smooth(sum(I(i,j,k),2))
Be mindful though that if i,j,k are scalar coordinates, neither the original eval form nor the above make sense.
  2 件のコメント
Bjorn Gustavsson
Bjorn Gustavsson 2021 年 3 月 18 日
If getsiganl returns a 2-D matrix it kind of makes sense, note that the eval-version would generate variables with names like I123 for i = 1, j = 2 and k = 3 and then the completely inuntangleable _I1234 for all of [i, j, k] = [12, 3 4], [1 23 4] or [1 2 34]...
Wiqas Ahmad
Wiqas Ahmad 2021 年 3 月 18 日
@Matt J I think I have checked this in prior but haven't worked. Anyway I got the right answer. Thank you

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeWhos についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by