我想找出矢量出现的矩阵列的索引。我的想法是对矩阵进行向量的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?
答案 0 :(得分:4)
不确定您是如何尝试解决问题的。但是对于repmat
或bsxfun
,它就像这样简单:
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