Matlab如何按向和矢量和矩阵?

时间:2014-05-01 14:20:42

标签: matlab matrix octave

我想找出矢量出现的矩阵列的索引。我的想法是对矩阵进行向量的AND,只有相同的列在新的vecotr中为1。但我不知道该怎么做。以下是示例:

H =
0   0   0   0   1   1   1   1   1   1   1   1   0   0   0
0   1   1   1   0   0   0   1   1   1   1   0   1   0   0
1   0   1   1   0   1   1   0   0   1   1   0   0   1   0
1   1   0   1   1   0   1   0   1   0   1   0   0   0   1

S =
0   1   0   1

从那以后我想得到2作为第二列或更好的载体

0 1 0 0 0 0 ... 0 

由于第二栏中有错误。

我如何在Matlab中做到这一点,甚至更好的Octave?

4 个答案:

答案 0 :(得分:4)

不确定您是如何尝试解决问题的。但是对于repmatbsxfun,它就像这样简单:

all(bsxfun(@eq,H,S'))

答案 1 :(得分:2)

怎么样

result = sum(H==repmat(S(:),[1 size(H,2)]))==4;

答案 2 :(得分:2)

我找到了函数

ismember(H', S, "rows") 

完全符合我的要求。你的答案也很好,谢谢。

答案 3 :(得分:1)

广播很容易。以下将需要Octave 3.6.0或更高版本,但如果您有以前的版本,则可以使用bsxfun

octave-cli-3.8.1> h = logical ([
0   0   0   0   1   1   1   1   1   1   1   1   0   0   0
0   1   1   1   0   0   0   1   1   1   1   0   1   0   0
1   0   1   1   0   1   1   0   0   1   1   0   0   1   0
1   1   0   1   1   0   1   0   1   0   1   0   0   0   1]);
octave-cli-3.8.1> s = logical ([0   1   0   1]');
octave-cli-3.8.1> all (h == s)
ans =

   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0

从这里开始,只需使用find来获取列号。如果匹配超过1列,它甚至可以工作:

octave-cli-3.8.1> find (all (h == s))
ans =  2