Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 水平连接字符串的单元格数组_Matlab - Fatal编程技术网

Matlab 水平连接字符串的单元格数组

Matlab 水平连接字符串的单元格数组,matlab,Matlab,我希望水平连接字符串单元格数组的行,如下所示 start = {'hello','world','test';'join','me','please'} finish = {'helloworldtest';'joinmeplease'} 是否有任何内置函数可以完成上述转换?一个简单的方法是在行上进行太多的循环 nRows = size(start,1); finish = cell(nRows,1); for r = 1:nRows finish{r} = [start{r,:}

我希望水平连接字符串单元格数组的行,如下所示

start = {'hello','world','test';'join','me','please'}

finish = {'helloworldtest';'joinmeplease'}

是否有任何内置函数可以完成上述转换?

一个简单的方法是在行上进行太多的循环

nRows = size(start,1);
finish = cell(nRows,1);

for r = 1:nRows
    finish{r} = [start{r,:}];
end
编辑

一个更复杂、更难阅读的解决方案,也可以做到这一点(一般解决方案留给读者作为练习)


finish=accumarray([1 1 1 2 2],[1 3 5 2 4 6],[],@(x){[start{x}}}

有一种简单的非循环方法,您可以使用函数和:


我想你想要的是,这两个被连接成一个单单元数组。试着使用这个代码,对我有用


'x=[{start},{finish}];'

谢谢,这很有效,我花了20分钟的时间尝试使用矢量化-我不记得我上一次在Matlab中使用循环:)@Chris R:正如你所看到的,有一个使用accumarray的非循环解决方案,尽管你可能不想使用它。无论如何,如果循环没有进行太多的函数调用,它在较新版本的Matlab中通常相当快。@ChrisR:如果您不喜欢for循环,可以在一行中编写:
finish=arrayfun(@(i)[start{i,:}],1:size(start,1),'UniformOutput',false')示例变量
finish
旨在作为输出(最终结果)。它不应该是输入的一部分。简单地将“X”替换为“finish”
>> finish = num2cell(start,1);
>> finish = strcat(finish{:})

finish = 

    'helloworldtest'
    'joinmeplease'