我有一个单元格数组 A。我想选择第一列(例如)具有值 1234(例如)的所有行。
当 A 不是元胞数组时,我可以通过以下方式完成此操作:
B = A(A(:,1) == 1234,:);
但是当 A 是一个单元格数组时,我收到以下错误消息:
error: binary operator `==' not implemented for `cell' by `scalar' operations
有谁知道如何为单元阵列完成此操作?
我有一个单元格数组 A。我想选择第一列(例如)具有值 1234(例如)的所有行。
当 A 不是元胞数组时,我可以通过以下方式完成此操作:
B = A(A(:,1) == 1234,:);
但是当 A 是一个单元格数组时,我收到以下错误消息:
error: binary operator `==' not implemented for `cell' by `scalar' operations
有谁知道如何为单元阵列完成此操作?
问题在于表达式a(:,1) == 1234
(以及a{:,1} == 1234
)。
例如:
octave-3.4.0:48> a
a =
{
[1,1] = 10
[2,1] = 13
[3,1] = 15
[4,1] = 13
[1,2] = foo
[2,2] = 19
[3,2] = bar
[4,2] = 999
}
octave-3.4.0:49> a(:,1) == 13
error: binary operator `==' not implemented for `cell' by `scalar' operations
octave-3.4.0:49> a{:,1} == 13
error: binary operator `==' not implemented for `cs-list' by `scalar' operations
我不知道这是否是最简单或最有效的方法,但这有效:
octave-3.4.0:49> cellfun(@(x) isequal(x, 13), a(:,1))
ans =
0
1
0
1
octave-3.4.0:50> a(cellfun(@(x) isequal(x, 13), a(:,1)), :)
ans =
{
[1,1] = 13
[2,1] = 13
[1,2] = 19
[2,2] = 999
}
我目前没有 Octave 可供试用,但我相信以下方法可以做到:
B = A(A{:,1} == 1234,:);
当处理cells()返回单元格时,{}返回单元格的内容。
我猜 Class ofA
是cell
. (您可以在工作区框中看到)。
所以你可能需要通过 转换A
为矩阵cell2mat(A)
。
然后,就像您所做的那样使用 Matlab:B = A(A(:,1) == 1234,:);