簡體   English   中英

在matlab中使用3d數組的問題

[英]issue working with 3d arrays in matlab

First Question

關於我的代碼:

for z = [1 2 4 8 12 16 24 32 64 96 128]    
    for a=1:24
        a;
        for d=1:5
            d;
           [result]=evolRand(128,1,10,1,bench);
           bb= 5*(a-1)+d;
           temp=eval(['minExe_useModel_' num2str(z)]);
           %z=num2str(zz)
           exploreff(a,d,z) =mean(mean(result(a,d).randMin(:,2:end)))/temp(bb);
        end
    end
end

為什么最后我得到:

>>size(exploreff)

ans =

    24     5   128

雖然我已經指定z= [1 2 4 8 12 16 24 32 64 96 128]這是11 ??

Second Question

我怎么能從這些z中定義一個結構數組,以便我可以像exploreff(a,b).z一樣調用它們? cuz在腳本中定義它們就像這樣導致了

Structure assignment to non-structure object.

Error in explorationEffort_Speedup (line 15)
           exploreff(aa,dd).z=mean(mean(result(aa,dd).randMin(:,2:end)))/temp(bb);`

錯誤。

首先,

exploreff(a,d,z)

使用adz作為索引 ,因此您要沿第3維向第1,第2,第4,......第96和第128個索引分配11個值。 當您分配到當前維度之外的索引時,Matlab會自動擴展(並填充零)數組,因此第三維最終會以128個元素長度結束。

其次,如果將exploreff預先分配為數字數組,則不能僅將其作為結構進行尋址。 如果你首先將它預先分配為結構數組(使用struct ),那么動態擴展它並以這種方式添加字段應該沒問題(我只有Octave來測試,這讓我做了例如a(2,3).z = 5直接但我似乎記得Matlab想要索引或字段首先存在 - 那 2007a雖然......)。

我想這就是你想做的......

z = [1 2 4 8 12 16 24 32 64 96 128];

for i = 1:length(z)
    for a=1:24
        a;
        for d=1:5
            d;
           [result]=evolRand(128,1,10,1,bench);
           bb= 5*(a-1)+d;
           temp=eval(['minExe_useModel_' num2str(z(i))]);
           %z=num2str(zz)
           exploreff(a,d,z(i)) =mean(mean(result(a,d).randMin(:,2:end)))/temp(bb);
        end
    end
end

exploreff(a,d,z==8)

請注意, z在循環被替換為z(i) 您需要指定元素的索引,而不是直接指定所需的值。 在最后一行中, z==8指定向量z中具有8值的元素的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM