2016-11-22 103 views
0

我想在matlab來建立細胞類似如下:創建細胞在Matlab

Q{1,1,1}=1; 
Q{1,1,2}=1; 
Q{2,2,1}=1; 
Q{2,1,2}=1; 

不過,我不想手動創建此。在我的應用程序有一定的載體,其中一個可能是:x=[1 2 3 4]

而且用這個載體x我想創建

P{1,2,3,4}=1 

所以矢量x種決定了單元格的座標(抱歉爛英文)。

因爲我不知道該向量的長度(它可以改變從個別情況),我不能做到這一點:

 P{x(1,1),x(1,2),x(1,3),x(1,4)}=1; 

我能做些什麼嗎?

編輯:我把單元格內容與數字「一」只是爲例。單元格內容將由函數sdpvaryalmip toolbox生成的線性矩陣變量。

+0

對於開始,你可以看看[鏈接](http://stackoverflow.com/questions/792683/compact-matlab-matrix-indexing-notation),他們已經解釋了很好的索引技術。 –

+0

有幾個問題需要澄清:您的所有單元格是否包含相同大小的數據?你絕對需要你的結果是一個單元陣列嗎? – BillBokeey

+0

@BillBokeey請檢查編輯 – gustavoreche

回答

0

我不知道你能做到這一點,而不訴諸eval

>>> x=[1,2,3,4]; 
>>> value=1 % or whatever you need here 
>>> cmd=sprintf('%s%s%s','P{', strjoin(arrayfun(@(a) num2str(a),x,'UniformOutput',false),','), '}=value') 
cmd = P{1,2,3,4}=1 
>>> eval(cmd) 
P = {1x2x3x4 Cell Array} 
>>> P{1,2,3,4} 
ans = 1 
>>> 
+0

在您的解決方案中,您正在編寫數字「1」。這個數字只是一個例子,我不想手動編寫它,實際上我不想寫一個數字給P.我的'P'應該是一個線性矩陣變量,我使用yalmip工具箱設置。我很抱歉有什麼麻煩,但我想簡化這個問題。 – gustavoreche

1

首先,如果你只有數字內容也許矩陣是更好然後一個細胞。


要填充在細胞內的空間具有一定的輸入,你可以做到以下幾點:

x = [1 2 3 4]; 
P(x) = {1} 
P = 
    [1] [1] [1] [1] 

這也適用於當指數被跳過

x = [1 2 4 5] 
P(x) = {1} 
P = 
    [1] [1]  [] [1] [1] 

要創建Q你應該預分配它以獲得正確的大小,那麼你可以使用sub2ind來指出正確的索引

Q = cell(2,2,2) 
% To populate all with 1 
Q(:) = {1} 
Q(:,:,1) = 
    [1] [1] 
    [1] [1] 
Q(:,:,2) = 
    [1] [1] 
    [1] [1] 
% To populate only a certain indexes 
idx = sub2ind(size(Q), [1 1 2 2], [1 1 2 1], [1 2 1 2]); 
Q(idx) = {1} 
Q(:,:,1) = 
    [1]  [] 
    [] [1] 
Q(:,:,2) = 
    [1]  [] 
    [1]  [] 
+0

他想填充一個特定的索引而不是所有的索引@ nilZ0r –

+0

@ Optimus1072是的,這也是我的大部分代碼示例所做的。 'Q(:)'作爲一個例子來比較'Q(idx)'。我認爲評論澄清了差異。 – NLindros