将两个阵列合并为一个单元

时间:2016-03-03 15:51:07

标签: matlab struct

所以我一直试图解决这个问题几个小时,我无法弄清楚如何获得我想要的格式。

我有一个数组x和y:

x=[39.8; 36.8; 36.6; 37.7]
y=[-56.7; -57.6; -60.2; -59.4]

我想将这两个转换为单个数组z,但是在这样的单个单元格中:

Single Column
-------------
39.8, -56.7

36.8, -57.6

36.6, -60.2

37.7, -59.4

此外,我有一个24x1双倍。它有很多出现,但主要是零。我想把这是下一栏,但我知道它需要与上面的绳索长度相同。有没有办法创建一个只有数字> 0的数组?

2 个答案:

答案 0 :(得分:1)

这是怎么回事?

x=[39.8; 36.8; 36.6; 37.7]; y=[-56.7; -57.6; -60.2; -59.4];
X=num2cell(x);
Y=num2cell(y);
Z=strcat(X,Y);

whos Z:

 Name      Size            Bytes  Class    Attributes

 Z         4x1               304  cell       

Z{1}

ans =

39.8000  -56.7000

要获得没有零的数组,请执行以下操作:

ARRAY(ARRAY == 0 ) = [];

答案 1 :(得分:0)

这里的解决方案可以更好地扩展到多个阵列。在我的机器上,它也更快。

x = [39.8; 36.8; 36.6; 37.7];
y = [-56.7; -57.6; -60.2; -59.4];
tic
for i = 1:1000
    X = num2cell(x);
    Y = num2cell(y);
    Z1 = strcat(X,Y);
end
toc
tic
for i = 1:1000
    Z2 = arrayfun(@horzcat, x, y, 'un', 0);
end
toc
assert(isequaln(Z1, Z2));

时间安排:

Elapsed time is 0.106900 seconds.
Elapsed time is 0.017918 seconds.