第一个数组 (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
。