创建细胞在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;
我能做些什么吗?
编辑:我把单元格内容与数字“一”只是为例。单元格内容将由函数sdpvar
从yalmip toolbox
生成的线性矩阵变量。
我不知道你能做到这一点,而不诉诸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工具箱设置。我很抱歉有什么麻烦,但我想简化这个问题。 – 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] []
他想填充一个特定的索引而不是所有的索引@ nilZ0r –
@ Optimus1072是的,这也是我的大部分代码示例所做的。 'Q(:)'作为一个例子来比较'Q(idx)'。我认为评论澄清了差异。 – NLindros
对于开始,你可以看看[链接](http://stackoverflow.com/questions/792683/compact-matlab-matrix-indexing-notation),他们已经解释了很好的索引技术。 –
有几个问题需要澄清:您的所有单元格是否包含相同大小的数据?你绝对需要你的结果是一个单元阵列吗? – BillBokeey
@BillBokeey请检查编辑 – gustavoreche