创建细胞在Matlab

问题描述:

我想在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

我不知道你能做到这一点,而不诉诸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

首先,如果你只有数字内容也许矩阵是更好然后一个细胞。


要填充在细胞内的空间具有一定的输入,你可以做到以下几点:

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