我有一个像这样的一组轨道的单元格数组:
<TL1x3> double
<TL1x3> double
<TL3x3> double
...
其中TL代表轨道长度。每个元素的值都不同,但总有三列:time,x coord,y coord。
从跟踪算法中我得到x和y坐标(以像素为单位)。但是,我需要它们在nm中,所以我必须将它们与一个值相乘,但只有第二个和第三个,而不是每个元素的第一列,例如:
0 5 6 x2 0 10 12
0.5 7 2 ---> 0.5 14 4
1 8 1 1 16 2
... ...
这对于数组的每个元素都是。
使用cellfun,我已设法更改阵列的每个单元格,但我不知道如何只更改一个部分。你知道怎么做这个......?
答案 0 :(得分:1)
您可以通过创建一个调用bsxfun()
并将其传递给cellfun()
的匿名函数来执行此操作。假设您的输入数据位于单元格数组inputData
中,并且要应用的比例因子位于标量变量scaleFactor
中;
scaledData = cellfun(@(X) bsxfun(@times, X, [1 scaleFactor scaleFactor]), inputData, 'UniformOutput', false);
我认为这会给出你想要的结果
答案 1 :(得分:1)
给出样本输入:
c={[1 2 3]; [4 5 6]; [7 8 9; 10 11 12; 13 14 15]};
然后:
xf = sparse([1 0 0; 0 2 0; 0 0 2]);
d=cellfun(@(x) x * xf, c, 'uniformoutput', false);
答案 2 :(得分:0)
它可能不是最优雅也不是最有效的方法,但将您的单元格数组转换为矩阵可以简化您的工作:
A = {[0 5 6] ;
[0.5 7 2];
[1 8 1 ]}
B = cell2mat(A)
B(:,2:end) = 2*B(:,2:end)
在命令窗口中给出:
A =
[1x3 double]
[1x3 double]
[1x3 double]
在:
B =
0 5.0000 6.0000
0.5000 7.0000 2.0000
1.0000 8.0000 1.0000
后:
B =
0 10.0000 12.0000
0.5000 14.0000 4.0000
1.0000 16.0000 2.0000
您还可以创建一个临时单元格数组,其中包含原始单元格数组的最后两列,然后对其应用cellfun并将其放回原始单元格中。速度/性能是否适合您?