gpt4 book ai didi

matlab - 从matlab中的单元格数组中删除包含零的行

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:41 25 4
gpt4 key购买 nike

我有一个由特定代码生成的元胞数组,如下所示:

m = 

[ 0] 'GO:0008150'
'GO:0008150' 'GO:0016740'
'GO:0016740' 'GO:0016787'
'GO:0016787' 'GO:0006810'
'GO:0008150' 'GO:0006412'
'GO:0016740' 'GO:0004672'
'GO:0016740' 'GO:0016779'
'GO:0016787' 'GO:0004386'
'GO:0016787' 'GO:0003774'
'GO:0016787' 'GO:0016298'
'GO:0006810' 'GO:0016192'
'GO:0006412' 'GO:0005215'
'GO:0004672' 'GO:0030533'
[ 0] 'GO:0008150'
[ 0] 'GO:0016740'
'GO:0008150' 'GO:0016787'
'GO:0008150' 'GO:0006810'
'GO:0006810' 'GO:0006412'
[ 0] 'GO:0004672'
[ 0] 'GO:0016779'
[ 0] 'GO:0004386'
'GO:0016192' 'GO:0003774'
[ 0] 'GO:0016298'
[ 0] 'GO:0016192'
'GO:0006810' 'GO:0005215'
'GO:0005215' 'GO:0030533'

我需要删除包含零的行(例如:应该删除第一行,因为我们在第一列中有一个零)。那么如何从这个不包含零的数组创建一个数组呢?

最佳答案

你可以在一个漂亮的单行中做到这一点:

m(any(cellfun(@(x)x(1)==0, m),2), :) = []

或者:

m(any(~cellfun(@ischar, m),2), :) = []

速度稍快。

如果您可以确定只有第一列永远包含零,请使用

m = m(cellfun(@ischar, m(:,1)),:)

最后,您可以使用

m = m(cellfun('isclass', m(:,1), 'char'),:)

看起来“老”,但实际上有更好的性能。

在您的示例数组上测试这些一千次,给出

Elapsed time is 1.382801 seconds.
Elapsed time is 0.138519 seconds.
Elapsed time is 0.075245 seconds.
Elapsed time is 0.014674 seconds.

关于matlab - 从matlab中的单元格数组中删除包含零的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com