此问题与matlab: find the index of common values at the same entry from two arrays有关 .
假设我有 1000
by 10000
矩阵,其中包含值 0
, 1
和 2
. 每行都被视为样本 . 我想根据公式 d = 1-1/(2p)sum(a/c+b/d)
计算这些样本之间的成对距离,其中 a
, b
, c
, d
可以根据某些定义和 p=10000
被视为长度为 10000
的行向量 . c
和 d
是概率,如 c+d=1
.
如何查找 a
, b
, c
, d
的值的示例:假设我们要在样本 i
和b j
之间找到 d
,然后我查看行 i
和 j
.
如果行 i
和 j
的 k
条目具有值 2
和 2
,那么 a=2,b=0,c=1,d=0
(我想在这种情况下我将分配 0/0=0
) .
如果行 i
和 j
的 k
条目具有值 2
和 1
,反之亦然,那么 a=1,b=0,c=3/4,d=1/4
.
类似的任务将为 2,0
( a=0,b=0,c=1/2,d=1/2
),_ 1,1
( a=1,b=1,c=1/2,d=1/2
),_ 1,0
( a=0,b=1,c=1/4,d=3/4
), 0,0
( a=0,b=2,c=0,d=1
)提供案件 .
我到目前为止使用的matlab代码是 i
和 j
使用 for
循环,然后使用 find
找到上述情况,然后为 a/c
和 b/d
创建两个数组 . 这是非常缓慢的,有没有办法可以提高效率?
编辑:距离 d
是第13页的this paper中给出的公式 .
1 回答
如果这些系数是固定的,那么我想我知道
pdist
直到@ horchler的注释,你得到它包含在循环中,并将常数考虑在内: