如何过滤以匹配或排除Octave中的某些字段?
在CentOS 5.8上使用Octave 3.0.5,我需要从更大的矩阵中过滤行以进行各种分析。
例如,我有一个如下所示的数组:
A = { [ 0, 5, 32 ],
[ 0, 3, 2 ],
[ 1, 4, 13 ],
[ 1, 2, 32 ],
[ 2, 7, 99 ],
[ 2, 0, 42 ] };
现在我需要能够提取第一个值等于1的所有行,或者第二个值大于3的行等等。我已经尝试阅读文档并搜索示例,但是我只是没有看到它。
谢谢!
答案 0 :(得分:1)
您可以使用cellfun
遍历单元格数组并获取索引(二进制):
octave> cellfun (@(x) x(1) == 1 || x(2) > 3, A)
ans =
1
0
1
1
1
0
使用您的示例:
octave> A(cellfun (@(x) x(1) == 1 || x(2) > 3, A))
ans =
{
[1,1] =
0 5 32
[2,1] =
1 4 13
[3,1] =
1 2 32
[4,1] =
2 7 99
}
可能更快的替代方案是完全抛弃单元阵列并使用矩阵(只要单元阵列中的每个单元具有相同的大小,矩阵就更有意义,即使您需要创建多维矩阵)。这可能会更快更简单:
octave> B = cell2mat (A);
octave> B(B(:,1) == 1 | B(:,2) > 3, :)
ans =
0 5 32
1 4 13
1 2 32
2 7 99