-2

我有两个矩阵:矩阵 {a} <252x1> 是矩阵 {b} <252x4000> 的子集。我需要确定矩阵 {b} 中出现矩阵 {a} 的值之前和之后的天数。

Example:

Matrix a  Matrix b
10       12 34 54 10
23       23 98 78 98
43       98 53 43 88
44       98 44 88 78

Output
1  1  1  10
23 1  1  1
1  1  43 1
1  44 1  1

Days
3 0
0 3
2 1
1 2
4

2 回答 2

1

假设每行恰好出现一次ain :b

使用bsxfun获得result

result=ones(size(b));
ainb=bsxfun(@eq,a,b);
result(ainb)=b(ainb);

使用带有两个输出参数的finda查找所在的列索引,并从中推断出天数:b

[colidx_rev,~] = find(ainb);
colidx(colidx_rev,1) = 1:4;

Days = [colidx-1 size(b,2)-colidx];

any(sum(ainb,2)>1). 接下来要做的是选择一个(例如第一个匹配项)。通过使用循环或更短的使用arrayfun以另一种方式查找列索引来做到这一点:

col_idx = arrayfun(@(rowi) find(ainb(rowi,:),1),1:size(b,1))';

其余的类似。

于 2012-07-31T13:48:42.123 回答
1

此答案假设每行只有一个匹配项:

a = [10;23;43;44]
b = [12 34 45 10;23 98 78 98;98 53 43 88; 98 44 88 78]
l = bsxfun(@eq, a, b)
[c r] = find(l')
Days = [c - 1, size(b, 2) - c]
Output = b.*l + ~l

If the assumption is bad then I think you'll be better off using loops.

于 2012-07-31T13:49:10.670 回答