matlab中,如何在for循环中把每一个元胞数组都写成excel文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中,如何在for循环中把每一个元胞数组都写成excel文件相关的知识,希望对你有一定的参考价值。

A = [3 1 3 4 2; 3 4 3 1 3;1 4 1 4 4;4 4 2 3 4;2 2 1 2 3;4 4 2 4 3;2 1 1 2 3];column = 2; %指定列num = unique(A(:,column)); %找到该列所有不相同的值B = cell(1,length(num)); %将所有相同的分组for i=1:length(num) %length(x0)为数列的长度,即它里面有多少个元素.如果x0是矩阵的话,比方说M行N列,那么length返回M和N这两个数的最大值. row_index = A(:,column) == num(i); Bi = A(row_index,:); xlswrite('yuanbao.xlsx',Bi)end 上面for循环中,把元胞数组B中的三个元胞写到三个excel中。求大神指点

把 cell 矩阵写入 excel 文件很简单,cell2table 变成 table格式,writetable函数就可以了。

举个例子:

     C = 'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'

    T = cell2table(C,'VariableNames','Name','Age','Result','Gender');

    writetable(T,'tabledata.xlsx')

参考技术A 使用xlswrite(filename,a,sheet)

filename是文件名
a是你要写成excel的元胞数组
sheet 可以选择写入excel的哪个sheet
参考技术B %%无数据,未测试
clear
clc
a=xlsread('mu=5.xlsx');
b=a(1:106,1);
c=a(1:106,2:51);
R=[];
for i=1:50
X=b;
Y=c(:,i);
R=[R;corrcoef(X,Y)];%改了这
end
xlswrite('aaa.xlsx',R)本回答被提问者和网友采纳
参考技术C 有点难,可以去找点matlab的相关资料吧 参考技术D 拔出来,拔出来

如何在 MATLAB 的元胞数组中搜索字符串?

【中文标题】如何在 MATLAB 的元胞数组中搜索字符串?【英文标题】:How to search for a string in cell array in MATLAB? 【发布时间】:2011-12-25 01:41:02 【问题描述】:

假设我有元胞数组

strs = 'HA' 'KU' 'LA' 'MA' 'TATA'

如果要查找'KU'的索引该怎么办?

【问题讨论】:

请注意,当前的最佳答案已经过时了。确保同时检查this answer。 【参考方案1】:

我猜下面的代码可以解决问题:

strs = 'HA' 'KU' 'LA' 'MA' 'TATA'
ind=find(ismember(strs,'KU'))

返回

ans = 
     2

【讨论】:

请记住,这个通用解决方案很好,因为它适用于多种数据类型,但它只适用于完全匹配。如果您需要不区分大小写的匹配,请参阅***.com/a/9433112/44737。如果您需要匹配更复杂的内容,例如正则表达式或结构中的字段,请参阅***.com/a/8061808/44737 ismember 有点笨拙,可以使用更新的版本进行更新。我觉得使用 strcmpi 等基于 str 的函数更安全。 也可以在 Octave 中工作【参考方案2】:

最短的代码:

strs = 'HA' 'KU' 'LA' 'MA' 'TATA';
[~,ind]=ismember('KU', strs)

但它只返回strs 中的第一个位置。如果未找到元素,则ind=0

【讨论】:

【参考方案3】:

我发现每个人都忽略了您代码中最重要的缺陷:

strs = 'HA' 'KU' 'LA' 'MA' 'TATA'

应该是:

strs = 'HA' 'KU' 'NA' 'MA' 'TATA' 

strs = 'HAKUNA' 'MATATA'

现在如果你坚持使用

ind=find(ismember(strs,'KU'))

您将拥有no worries :)。

【讨论】:

我正要编辑原始问题,但看到太多答案:)【参考方案4】:
>> strs = 'HA' 'KU' 'LA' 'MA' 'TATA';
>> tic; ind=find(ismember(strs,'KU')); toc

经过的时间是 0.001976 秒。

>> tic; find(strcmp('KU', strs)); toc

经过的时间是 0.000014 秒。

所以,显然strcmp('KU', strs)ismember(strs,'KU') 花费的时间要少得多

【讨论】:

太棒了!您的解决方案应该是最重要的! 是的,我同意,这是最好的解决方案,但它只是 andreys 和 vidars 解决方案之间的比较。所以实际上安德烈应该得到它。 其实应该指出,如果你在比较两个不同大小的数组(即如果你有一个字符串数组而不是左侧的'KU' )。 Vidar 的解决方案在这种情况下确实有效(非常好),所以更通用。 @pankaj :这与制作 String->Indices 地图然后通过地图查找获取索引相比如何?明智地询问性能。【参考方案5】:

自 2011a 以来,推荐的方式是:

booleanIndex = strcmp('KU', strs)

如果你想获取整数索引(你经常不需要),你可以使用:

integerIndex = find(booleanIndex);

strfind 已弃用,因此请尽量不要使用它。

【讨论】:

【参考方案6】:

strcmp 和 strcmpi 函数是最直接的方法。他们通过数组搜索。

strs = 'HA' 'KU' 'LA' 'MA' 'TATA'
ix = find(strcmp(strs, 'KU'))

【讨论】:

【参考方案7】:

对于这种情况,其他答案可能更简单,但为了完整起见,我想我会在匿名函数中添加 cellfun 的使用

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))

它的优点是您可以轻松地使其不区分大小写或在具有结构单元数组的情况下使用它:

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))

【讨论】:

【参考方案8】:

你试过了吗

indices = Find(strs, 'KU')

见link

或者,

indices = strfind(strs, 'KU');

如果我没记错的话应该也可以。

【讨论】:

我试过 find 但由于数组是元胞数组,所以 MATLAB 会返回一些错误...但函数 strfind 似乎工作,谢谢!

以上是关于matlab中,如何在for循环中把每一个元胞数组都写成excel文件的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么把循环中生成的数值存入一个数组中

matlab元胞数组如何提取里面的具体元素?

请问如何使用MATLAB进行元胞数组批量提取数据。

matlab怎样合并元胞数组

matlab中的元胞数组如何实现批量的赋值呢?

matlab中如何寻找字符串在元胞数组中的位置?