如何在 matlab 中创建 adjacency/joint 概率矩阵
How to create an adjacency/joint probability matrix in matlab
从二进制矩阵,我想计算一种adjacency/joint概率密度矩阵(不太清楚如何标记它,请随意重命名)。
例如,我从这个矩阵开始:
A = [1 1 0 1 1
1 0 0 1 1
0 0 0 1 0]
我想产生这个输出:
Output = [1 4/5 1/5
4/5 1 1/5
1/5 1/5 1]
基本上,对于每一行,我想计算他们同意的次数比例(1 和 1 或 0 和 0)。 A 将始终与自身一致,因此沿对角线将其设为 1。无论添加多少个不同的 js,它仍然会导致 3x3,但是额外的 i 变量将导致 4x4。
我喜欢将 A 矩阵中沿 i 的输入视为人,将 Js 视为问题,因此最终输出是一个 3x3(人数)矩阵。
我在 matlab 上遇到了一些问题。如果你能帮我指出正确的方向,那就太好了。
因此,您可以分两部分进行。
bothOnes = A*A';
给你一个矩阵,显示每对行有多少个 1,并且
bothZeros = (1-A)*(1-A)';
给你一个矩阵,显示每对行共有多少个 0。
如果您将它们相加,您会得到它们共有多少个元素:
bothSame = A*A' + (1-A)*(1-A)';
然后只需除以行长度即可得到所需的分数表示形式:
output = (A*A' + (1-A)*(1-A)') / size(A, 2);
这应该会让你到达那里。
请注意,这仅在 A 仅包含 1 和 0 时有效,但它可以适用于其他情况。
这里有一些备选方案,假设 A
只能包含 0
和 1
:
如果您有统计工具箱:
result = 1-squareform(pdist(A, 'hamming'));
带隐式扩展的手动方法:
result = mean(permute(A, [1 3 2])==permute(A, [3 1 2]), 3);
使用位运算。这是一种更深奥的方法,并且仅当 A
最多有 53
列时才有效,因为浮点数限制:
t = bin2dec(char(A+'0')); % convert each row from binary to decimal
u = bitxor(t, t.'); % bitwise xor
v = mean(dec2bin(u)-'0', 2); % compute desired values
result = 1 - reshape(v, size(A,1), []); % reshape to obtain result
从二进制矩阵,我想计算一种adjacency/joint概率密度矩阵(不太清楚如何标记它,请随意重命名)。
例如,我从这个矩阵开始:
A = [1 1 0 1 1
1 0 0 1 1
0 0 0 1 0]
我想产生这个输出:
Output = [1 4/5 1/5
4/5 1 1/5
1/5 1/5 1]
基本上,对于每一行,我想计算他们同意的次数比例(1 和 1 或 0 和 0)。 A 将始终与自身一致,因此沿对角线将其设为 1。无论添加多少个不同的 js,它仍然会导致 3x3,但是额外的 i 变量将导致 4x4。
我喜欢将 A 矩阵中沿 i 的输入视为人,将 Js 视为问题,因此最终输出是一个 3x3(人数)矩阵。
我在 matlab 上遇到了一些问题。如果你能帮我指出正确的方向,那就太好了。
因此,您可以分两部分进行。
bothOnes = A*A';
给你一个矩阵,显示每对行有多少个 1,并且
bothZeros = (1-A)*(1-A)';
给你一个矩阵,显示每对行共有多少个 0。
如果您将它们相加,您会得到它们共有多少个元素:
bothSame = A*A' + (1-A)*(1-A)';
然后只需除以行长度即可得到所需的分数表示形式:
output = (A*A' + (1-A)*(1-A)') / size(A, 2);
这应该会让你到达那里。
请注意,这仅在 A 仅包含 1 和 0 时有效,但它可以适用于其他情况。
这里有一些备选方案,假设 A
只能包含 0
和 1
:
如果您有统计工具箱:
result = 1-squareform(pdist(A, 'hamming'));
带隐式扩展的手动方法:
result = mean(permute(A, [1 3 2])==permute(A, [3 1 2]), 3);
使用位运算。这是一种更深奥的方法,并且仅当
A
最多有53
列时才有效,因为浮点数限制:t = bin2dec(char(A+'0')); % convert each row from binary to decimal u = bitxor(t, t.'); % bitwise xor v = mean(dec2bin(u)-'0', 2); % compute desired values result = 1 - reshape(v, size(A,1), []); % reshape to obtain result