Matlab 对包含向量的单元格数组使用ismember()

Matlab 对包含向量的单元格数组使用ismember(),matlab,vector,comparison,grid-layout,cell-array,Matlab,Vector,Comparison,Grid Layout,Cell Array,我使用一个单元格数组,以[行,列]的形式包含网格位置的1x2向量。 我想检查此单元格数组中是否包含其他网格位置 不幸的是,我当前的代码导致了一个错误,我不能完全理解为什么: in_range = ismember( 1, ismember({[player.row, player.col]}, proximity(:,1)) ); 其中player.row和player.col是整数,approxity的第一列是前面提到的网格位置单元格数组 我收到的错误是: ??? Error using =

我使用一个单元格数组,以
[行,列]
的形式包含网格位置的1x2向量。 我想检查此单元格数组中是否包含其他网格位置

不幸的是,我当前的代码导致了一个错误,我不能完全理解为什么:

in_range = ismember( 1, ismember({[player.row, player.col]}, proximity(:,1)) );
其中
player.row
player.col
是整数,
approxity
的第一列是前面提到的网格位置单元格数组

我收到的错误是:

??? Error using ==> cell.ismember at 28
Input must be cell arrays of strings.
不幸的是,我找不到任何关于以这种方式使用
ismember()
的信息,只能将单元格数组作为字符串使用,或者在每个单元格中使用单个整数而不是向量

我曾考虑过使用
num2str()
str2num()
进行转换,但由于我必须在转换之间执行计算,并且由于代码将循环的次数(10000次循环,每个循环4次转换),因此这种方法似乎是禁止的

非常感谢您的帮助

编辑:为什么
ismember()
返回此错误?它是否将单元格数组中的所有向量都视为字符串数组

编辑:是否有更好/更有效的方法来确定返回向量中是否有1


ismember(1,ismember(…)

我现在时间不多(作为克丽丝·夏娃和所有人),所以这将是一个非常快速的回答

据我所知,问题在于找出一个xy坐标是否位于多个xy坐标的序列中,如果是的话,它所在位置的索引。如果是这种情况,并且您对效率感兴趣,那么处理字符串或单元格数组是浪费的。您应该使用数字矩阵/向量来进行此操作

因此,我的建议是:将单元格数组的第一行转换为数字矩阵。然后,将x y坐标与该数值矩阵的行进行比较。因为您只想知道两个坐标何时匹配数值矩阵的一行,所以使用
ismember
'rows'
选项-它将仅在匹配整行而不是匹配单个元素时返回true

下面是一些希望有帮助的示例代码:

%# Build an example cell array with coordinates in the first column, and random strings in the second column
CellOfLoc = {[1 2], 'hello'; [3 4], 'world'; [5 6], '!'};

%# Convert the first column of the cell array to a numerical matrix
MatOfLoc = cell2mat(CellOfLoc(:, 1));

%# Build an example x y coordinate location to test
LocToTest = [5 6];

%# Call ismember, being sure to use the rows option
Index = ismember(MatOfLoc, LocToTest, 'rows');
注意,如果单元格数组中的索引是字符串形式,那么在调用
ismember
之前,显然还需要在其中的某个地方调用
str2num


还有一件事,我注意到你是一个新成员,所以欢迎来到这个网站。如果您认为此回答令人满意地回答了您的问题,请单击此回答旁边的勾号来标记所回答的问题

在跨矩阵匹配时,我没有考虑
'rows'
选项(因此我认为需要使用单元格数组)。谢谢大家!@avDiGuida正如我在回复中提到的,如果我的回复解决了您的问题,最好的感谢是标记所回答的问题:-)