簡體   English   中英

Matlab 循環將行分配給元胞數組

[英]Matlab loop to assign rows to cell array

我有一個大的元胞數組A=cell(a,b,c,d)和一個維度為1 × b的行向量B

我想在 MATLAB 中構建一個循環,執行以下操作:

for i=1:n
   B = Calculate_row(input1,input2) %this is a function that creates my B row
   A{a,:,c,i} =  B(:)
end

無論如何,如果我嘗試執行A{a,:,c} = B(:)我收到以下錯誤:

預期花括號或點索引表達式有一個輸出,但有 b 個結果。

如果我嘗試做A(a,:,c) = B(:)我收到以下錯誤:

不可能從 double 轉換為單元格。

有沒有辦法做到這一點? (我知道一種不太優雅的可能有效的方法是將每個值分別分配給單元格,但我不想這樣做)。

一種方法是使B成為一個元胞數組,然后利用逗號分隔列表

B_cell = num2cell(B);
[A{a,:,c}] = B_cell{:}    %// or [A{a,:,c,i}] = B_cell{:} if tim's comment is correct

查看 Loren Shure 的文章Deal or No Deal以及這個答案以了解更多信息。

您的語法A{a,:,c} = B(:)的問題在於 RHS(即B(:) )只是一個矩陣,而 LHS 是一個逗號分隔的b結果列表。 因此,您基本上要求將1輸出分配給b變量,而 MATLAB 不喜歡這樣,因此也會出現錯誤消息。

A(a,:,c) = B(:)在於,使用()對元胞數組進行索引會返回元胞數組,因此您不能僅將矩陣(即B(:) )分配給元胞數組你的第二個錯誤。

暫無
暫無

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

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