我想在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
生成的线性矩阵变量。
答案 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
>>>