matlab 中的 BetaCV
BetaCV in matlab
我有一个 2 列 20 行的矩阵索引。
indices =
[1 2;
2 3;
2 1;
... ]
还有一个 4 行 4 列的第二个矩阵 distMat,我想找到 distMat 中元素的总和,位于 indices[][]
的每一行中给定的位置
distMat =
[1 3 1 5
2 2 4 2
3 8 3 7
3 8 3 7]
因为索引行是 1 2、2 3、3 1,所以应该检索并添加该位置的元素
所以我写了
result = sum(distMat[indices])
我收到语法错误。那么如何解决这个问题
一种方法是获取线性索引,然后简单地索引和求和,就像您在最后所做的那样 -
idx = sub2ind(size(distMat), indices(:,1), indices(:,2));
out = sum(distMat(idx))
样本运行-
>> indices
indices =
1 2
2 3
2 1
>> distMat
distMat =
1 3 1 5
2 2 4 2
3 8 3 7
3 8 3 7
>> idx = sub2ind(size(distMat), indices(:,1), indices(:,2));
>> distMat(idx)
ans =
3
4
2
>> sum(distMat(idx))
ans =
9
另一种方法:使用 sparse
to build a logical index 选择要求和的值:
indices = [1 2; 2 3; 2 1];
distMat = [1 3 1 5; 2 2 4 2; 3 8 3 7; 3 8 3 7];
result = sum(distMat((sparse(indices(:,1), indices(:,2), true, size(distMat,1), size(distMat,2)))));
这个works in Octave也是。
我有一个 2 列 20 行的矩阵索引。
indices =
[1 2;
2 3;
2 1;
... ]
还有一个 4 行 4 列的第二个矩阵 distMat,我想找到 distMat 中元素的总和,位于 indices[][]
的每一行中给定的位置distMat =
[1 3 1 5
2 2 4 2
3 8 3 7
3 8 3 7]
因为索引行是 1 2、2 3、3 1,所以应该检索并添加该位置的元素
所以我写了
result = sum(distMat[indices])
我收到语法错误。那么如何解决这个问题
一种方法是获取线性索引,然后简单地索引和求和,就像您在最后所做的那样 -
idx = sub2ind(size(distMat), indices(:,1), indices(:,2));
out = sum(distMat(idx))
样本运行-
>> indices
indices =
1 2
2 3
2 1
>> distMat
distMat =
1 3 1 5
2 2 4 2
3 8 3 7
3 8 3 7
>> idx = sub2ind(size(distMat), indices(:,1), indices(:,2));
>> distMat(idx)
ans =
3
4
2
>> sum(distMat(idx))
ans =
9
另一种方法:使用 sparse
to build a logical index 选择要求和的值:
indices = [1 2; 2 3; 2 1];
distMat = [1 3 1 5; 2 2 4 2; 3 8 3 7; 3 8 3 7];
result = sum(distMat((sparse(indices(:,1), indices(:,2), true, size(distMat,1), size(distMat,2)))));
这个works in Octave也是。