Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使二进制数组对称-NumPy/Python_Python_Arrays_Performance_Numpy - Fatal编程技术网

使二进制数组对称-NumPy/Python

使二进制数组对称-NumPy/Python,python,arrays,performance,numpy,Python,Arrays,Performance,Numpy,如何将非对称numpy矩阵转换为对称矩阵 要求是:如果上三角形(对角线上方)的元素a[i][j]为1,则下三角形a[j][i]的元素应更改为1 对于下三角形也是如此,如果a[i][j]=1,则上三角形中的对称元素a[j][i]应为1 只关心将元素从0更改为1,don;t将其从0更改为1 我可以用两个或更多的for循环来解决这个问题,但我想知道如何以更具python风格的方式来解决它,并提高时间效率 提前谢谢 例如: a= np.array ([[0, 0, 1, 0, 1],

如何将非对称numpy矩阵转换为对称矩阵

要求是:如果上三角形(对角线上方)的元素a[i][j]为1,则下三角形a[j][i]的元素应更改为1

对于下三角形也是如此,如果a[i][j]=1,则上三角形中的对称元素a[j][i]应为1

只关心将元素从0更改为1,don;t将其从0更改为1

我可以用两个或更多的for循环来解决这个问题,但我想知道如何以更具python风格的方式来解决它,并提高时间效率

提前谢谢

例如:

a= np.array ([[0, 0, 1, 0, 1],
              [0, 0, 0, 1, 1],
              [0, 0, 0, 1, 1],
              [1, 1, 0, 0, 0],
              [1, 1, 0, 1, 0]])
结果应该是:

a= np.array ([[0, 0, 1, 1, 1],
              [0, 0, 0, 1, 1],
              [1, 0, 0, 1, 1],
              [1, 1, 1, 0, 1],
              [1, 1, 1, 1, 0]])

一种完全带有
掩蔽的方式
-

In [40]: m = a==1

In [41]: (m | m.T).view('i1')
Out[41]: 
array([[0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [1, 1, 1, 0, 1],
       [1, 1, 1, 1, 0]], dtype=int8)
In [57]: (a.T | a)
Out[57]: 
array([[0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [1, 1, 1, 0, 1],
       [1, 1, 1, 1, 0]])
另加-

In [55]: ((a.T + a)>0).view('i1')
Out[55]: 
array([[0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [1, 1, 1, 0, 1],
       [1, 1, 1, 1, 0]], dtype=int8)
另一个仅使用
按位或ing
-

In [40]: m = a==1

In [41]: (m | m.T).view('i1')
Out[41]: 
array([[0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [1, 1, 1, 0, 1],
       [1, 1, 1, 1, 0]], dtype=int8)
In [57]: (a.T | a)
Out[57]: 
array([[0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 0, 1, 1],
       [1, 1, 1, 0, 1],
       [1, 1, 1, 1, 0]])

非常感谢,迪瓦卡!我要试试这个!发布的解决方案对你有用吗?如果是的话,请考虑接受。