在Matlab中创建单元格

时间:2016-11-22 07:47:57

标签: matlab cell

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

我可以在这做什么?

编辑:我将单元格内容与数字“一”放在一个例子中。单元格的内容是由sdpvar的函数yalmip toolbox生成的线性矩阵变量。

2 个答案:

答案 0 :(得分: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]     []

答案 1 :(得分: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
>>>