合并在一个单元阵列
问题描述:
我有许多在与许多额外空间的单元阵列的行的行的端部作为这样的2行:合并在一个单元阵列
'a' 'b' 'c' 'd' [] [] [] [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []
我想在第二行复制到第一行的结束,因为这样的:
'a' 'b' 'c' 'd' '1' '2' '3' [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []
请注意,上面给出的代码是为了证明什么,我希望做一个任意的例子。实际上,我将把这个功能作为更复杂功能的一个步骤。
我已经尝试搜索单元格阵列行中的第一个空元素,但由于某些原因,isempty并未将它们视为空。有没有别的方法可以让人指向我?
编辑: 以上后进行,第二行会被删除的措施,并提供:
'a' 'b' 'c' 'd' '1' '2' '3' [] []
'w' 'x' 'y' 'z' [] [] [] [] []
虽然真正的单元阵列将有超过3
答
更多的行我觉得这做你想做的事。我已将您的单元格阵列表示为c
。
n1 = find(cellfun('isempty',c(1,:)), 1); %// first empty cell in row 1
n2 = find(cellfun('isempty',c(2,:)), 1); %// first empty cell in row 2
c(1,n1:n1+n2-2) = c(2,1:n2-1); %// copy the relevant part of row 2 onto row 1
这将自动地延伸你的细胞水平如果非空单元中第2行的数目超过空单元的行数1。
实施例:输入:
c = {'a' 'b' 'c' 'd' [] [] [] [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []}
输出:
c =
'a' 'b' 'c' 'd' '1' '2' '3' [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []
答
以下是一种使用高效的一般方法logical indexing
选择非空细胞,单个呼叫到cellfun('isempty'
并执行如在Luis's solution谈到自动扩展 -
C = {
'a' 'b' 'c' 'd' [] [] [] [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []} %// Input cell array
N = 2; %//Number of rows to process, starting from 2 until the number of rows in C
Ct = C'; %//'# Transpose input cell array, as collecting elements that way is easier
vals = Ct(~cellfun('isempty',Ct(:,1:N))); %//'# elements from selected row(s)
C(1,1:numel(vals)) = vals; %// Place the values into the first row
随着N = 2
这是在问题陈述的情况下,输出将是 -
C =
'a' 'b' 'c' 'd' '1' '2' '3' [] []
'1' '2' '3' [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] []
随着N = 3
,你会复制第二行和第三行在第一行的末尾。因此,输出将是 -
C =
'a' 'b' 'c' 'd' '1' '2' '3' 'w' 'x' 'y' 'z'
'1' '2' '3' [] [] [] [] [] [] [] []
'w' 'x' 'y' 'z' [] [] [] [] [] [] []
等等。
在您的实际情况中,您是否只需要复制第一行末尾的第二行,或者我们是否也必须处理更多行?第二行和第三行以及其余行(如果有的话)会发生什么?他们保持原样吗? – Divakar 2014-11-25 12:49:20
我只需要添加一行到另一行。在此之后,第二行将被删除。不会有我需要向另一行添加多行的情况(即将第2行和第3行添加到第1行)。 – Doragan 2014-11-25 14:02:53
因此,如果要删除第二行,输出单元阵列将会是什么样子?问题中所述的期望输出仍显示第二行。在需要的输出上编辑你的问题来澄清?那么第三排会发生什么? – Divakar 2014-11-25 14:05:54