【问题标题】:Creating cells in Matlab在 Matlab 中创建单元格
【发布时间】:2017-04-05 19:18:00
【问题描述】:

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

【问题讨论】:

  • 首先你可以看看link,他们已经解释了很好的索引技术。
  • 有几个问题需要澄清:您的所有单元格是否都包含相同大小的数据?你绝对需要你的结果是一个单元格数组吗?
  • @BillBokeey 请检查编辑
  • 你知道PQ的实际大小吗?

标签: matlab cell


【解决方案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]     []

【讨论】:

  • 他想填充特定索引而不是所有索引@nilZ0r
  • @Optimus1072 是的,这也是我的大多数代码示例所做的。 Q(:) 只是作为一个例子来比较 Q(idx) 与。我认为 cmets 澄清了差异。
【解决方案2】:

如果不求助于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
>>>

【讨论】:

  • 在您的解决方案中,您正在写数字“1”。这个数字只是一个例子,我不想手动写,实际上我不想给 P 写一个数字。我的“P”应该是我使用 yalmip 工具箱设置的线性矩阵变量。对于任何麻烦,我深表歉意,但我想简化问题。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2021-06-12
相关资源
最近更新 更多