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

时间:2019-08-26 19:37:53

标签: python multidimensional-array

第一个数组(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以获取来自样本输入的所需结果的图像。

1 个答案:

答案 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