Matlab 如何将新数据附加到现有单元格数组中?

Matlab 如何将新数据附加到现有单元格数组中?,matlab,cell-array,Matlab,Cell Array,假设我有一个1x4单元数组,我还有一个while循环,在这个循环中我调用一个函数,该函数生成一个与原始数组大小相同的新结果 如何将新结果附加到现有结果中,以便仍有一个1x4数组,并将新结果附加到现有单元格中 请参见下面的示例代码: % image SegI = [2 2 2 0 0 2 2 2 0 0 1 1 2 0 0 1 1 1 1 0 1 1 1 1 1]; figure, imshow(SegI, [], 'Initial

假设我有一个1x4单元数组,我还有一个
while循环
,在这个循环中我调用一个函数,该函数生成一个与原始数组大小相同的新结果

如何将新结果附加到现有结果中,以便仍有一个1x4数组,并将新结果附加到现有单元格中

请参见下面的示例代码:

% image
SegI = [2 2 2 0 0
        2 2 2 0 0
        1 1 2 0 0
        1 1 1 1 0
        1 1 1 1 1];

figure, imshow(SegI, [], 'InitialMagnification','fit')     
grid on; 

% face vectors obtained from each internal node in the image; such that %edge directions of 1|2 are denoted as 'm', and 0|2 as 'n', and others as NaN
% i made the 'b' up just for the purpose of detecting the output easily

allfaces = {NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; 'm',NaN,'m',NaN; NaN,NaN,NaN,NaN; NaN,NaN,'n','n'; NaN,'n',NaN,'n'; NaN,'m',NaN,NaN; NaN,NaN,NaN,'m'; NaN,NaN,NaN,NaN; NaN,'m','b',NaN; 'm',NaN,NaN,'n';  NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN; NaN,NaN,NaN,NaN};


% find point vertices... which are nodes that contain pixel edges of both 1|2 and 0|2
Pvertex = find( any(strcmp('m', allfaces),2) & any(strcmp('n', allfaces),2) );


% create storage cell array as well as initialize Pvertex to inodej
myArray = cell(numel(Pvertex), 4);
inodej  = Pvertex;
cp = [3,3];     %coordinates of Pvertex


for k = 1: numel(Pvertex)

    % find next node from Pvertex
     [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces);


    while dist_node < sqrt(2)
        % find nodes until exit loop
       [myArray, allfaces, inodej, ynode, xnode, dist_node] = Obtain_nodes(k, cp, inodej, myArray, allfaces);
    end


end
有关一些说明,请参见下图

循环
中的第一个函数调用返回:

inodej=10
myArray={NaN,'m',b',NaN}

while循环中的函数调用返回:

inodej=6
,它从第6行的
所有面
中提取一个结果,给出:
myArray={NaN,NaN,NaN,'n'}

但是,在
while循环退出后,我看不到我的初始(第1个)结果,因为新的(第2个)结果更新了单元格数组。因此,对于我来说,问题是如何在执行循环
时获得存储的任何新结果,并使用以前的结果进行更新

我希望我的最终输出是以下形式:

[{NaN, NaN}] [{'m', NaN}] [{'b', NaN}] [{NaN, 'n'}]
请记住,例如,我可以增加搜索距离
(dist_node)
,在这种情况下,我事先不知道(通过目视检查除外)可以获得多少新结果。因此,代码必须能够附加尽可能多的新结果

拜托,我需要任何帮助/建议/建议来度过这个难关。先谢谢你

myArray1 = {NaN, 'm', 'b', NaN};
myArray2 = {NaN, NaN, NaN, 'n'};
result = cellfun(@(x,y) {x y}, myArray1, myArray2, 'UniformOutput', false)'
x:myArray1的每个元素

y:myArray2的每个元素

UniformOutput=false确保输出为单元格

最后的素数将行向量转换为列向量


您真的需要单元阵列吗?矩阵将更快,占用更少的内存。另外,请记住,增加阵列会导致一些性能损失。如果你能感谢路易斯·门多,你会过得更好。我真的不知道在这种情况下如何预先分配。也许你能帮我。非常感谢。一些解释和解决方案可以帮助其他人理解这个问题。请大家看看编辑后的版本。非常感谢。虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性@凯斯:事实上,我还没有发布全部代码,因为这对任何人来说都太累了。我真的试着让它尽可能的简单和简洁,只放一些让人理解的必要信息。我相信,如果您运行代码并遵循下面的小描述,您很可能会看到问题所在。非常感谢。
myArray1 = {NaN, 'm', 'b', NaN};
myArray2 = {NaN, NaN, NaN, 'n'};
result = cellfun(@(x,y) {x y}, myArray1, myArray2, 'UniformOutput', false)'