python - 在具有一行零的矩阵中,如何用一个替换矩阵的相应对角线条目?
问题描述
我有一个方阵 A,其值为 0 或 1,并且包含一行或多行零。对于每一行零,我希望用一个替换 A 的相应对角线条目。
例如,假设
A=np.array([[0,1,1,0,1],[0,0,1,1,1],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,0]])
其中第 3 行和第 5 行全为零。我希望将 A[3,3] 和 A[5,5] 设置为 1。
解决方案
矩阵是:
>>> A
array([[0, 1, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0]])
我们可以找出所有行的总和:
>>> A.sum(axis=1)
array([3, 3, 0, 1, 0])
我们希望与 0-sum 行对应的所有对角线都设置为 1。
因此,以下工作:
>>> row_sums = A.sum(axis=1)
>>> A[row_sums == 0, row_sums == 0] = 1
>>> A
array([[0, 1, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 1]])
请注意,这是有效的,因为row_sums == 0
它True
适用于所需的行:
>>> row_sums == 0
array([False, False, True, False, True])
从而A[row_sums == 0, row_sums == 0]
选择所需的元素。
推荐阅读
- powerbi - SSAS 表格/PowerBi - 可以在 PowerBI 的图表中将单位转换为 K 格式吗?
- spark-streaming - 火花流关闭没有错误
- unity3d - 多个 Asset Bundle 下载缓存问题
- stored-procedures - Redshift 过程返回表给出错误
- jquery - jQuery DataTable 显示条目不起作用
- parameters - 机器人未清除障碍物 (ROS)
- android - 如何在 android 应用程序中显示浮动视图?
- android - RecyclerView,kotlin,点击响应延迟
- c# - AddHealthCheckEndpoint 不适用于 AspNetCoreHostingModel=OutOfProcess
- java - Grafana 仪表板将执行程序池的“boundedElastic”与“parallel”分开