第一个数组(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。
link到开始的数组和所需的结果
另外,由于我们的K通常为300到500,并且可能的值范围为1到7,因此正在寻找一种计算有效的方法。
我们必须通过300个单独的迭代或一次创建300个不同的起始一维数组(K,1)来创建300个不同的共识/协议矩阵,以执行相同的过程。
我什么都没尝试,因为我不知道该怎么办。
预期结果将是一个K x K
矩阵,其中每个单元格如果列和行项iD最初具有相同的值,则为1;如果它们在开始的列和行中最初没有相同的值,则为0。维数组(K,1)。
即(B = 2,H = 2)因此(B,H = 1) 但是(A = 1,B = 2)因此(A,B = 0)
另请参阅link以获取来自样本输入的所需结果的图像。
答案 0 :(得分: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
。