如果值匹配,则将一维数组 (K,1) 转换为 1 或 0 的二维共识/协议数组 (K,K)



第一个数组 (K,1) 是一维,每个索引项都有值

(A,B,C,D,E,F,G,H) = [1,2,2,3,1,3,1,2] 其中 A=1, B=2, C=2, D=3, E=1, F=3, G=1 和 H=2。

我们希望创建一个 (K, K) 共识或协议值数组,该数组将是一个

(A,B,C,D,E,F,G,H) x (A,B,C,D,E,F,G,H) 矩阵。

因此,如果任何两个索引项在原始一维数组中具有相同的值,则新值将为 1,但如果两个项具有不同的值,则新值将为零。

例如,因为原始一维数组中的 B=2 和 H=2,那么 B、H =1 为二维共识矩阵数组,但由于原始数组中的 A=1 和 B=2,则共识矩阵中的 A、B=0。

指向起始数组和所需结果的链接

此外,寻找一种计算效率高的方法,因为我们的 K 通常是 300 到 500 个项目,可能的值范围从 1 到 7。

我们必须通过 300 次单独的迭代或 300 个不同的起始一维数组 (K,1) 一次完成一个来执行相同的过程,以创建 300 个不同的共识/协议矩阵。

我没有尝试过任何东西,因为我不知道如何处理。

预期结果将是一个K x K矩阵,如果列和行项 iD 最初具有相同的值,则每个单元格为 1,如果它们最初在起始一维数组中没有相同的值,则为零 (K,1)。

即 (B = 2, H=2) 因此 (B,H=1) 但 (A=1, B=2) 因此 (A,B =0)

另请参阅指向来自示例输入的所需结果的图像的链接。

如果我们的数组是一个 numpy 数组,那么我们可以利用广播。

import numpy as np
arr = np.array([1,2,2,3,1,3,1,2])
np.equal(np.reshape(arr, (-1, 1)), arr)

结果是一个dtype('bool')数组,但如果您愿意,可以将其转换回int

最新更新