python - 如何在不使用 for 循环的情况下仅更新二维列表中的选定值?
问题描述
我有一个巨大的矩阵,大约有 80000 行和 66000 列。我需要更新每一行中的选定值。这些选定的值因行而异。例如,我可能必须更新第一行的第 346、第 446、第 789 和第 321 列值,而对于第二行,我可能必须更新第 821、第 564、第 101、第 781 列值。我希望你了解情况。
在这里,我正在使用一个小矩阵来模拟这个问题。假设我有一个二维列表/矩阵。
matrix = [ [1,2,3], [4,5,6], [7,8,9]]
在实际问题中,我需要更新所有行,但为了简单起见,我只考虑 1 行。即第二行。我希望更新第 2 行的第 1 和第 2 值,并保持第 2 行中的其余值不变。我需要在不使用 for 循环的情况下做到这一点。我试过的代码如下:
index_list = [0,1]
matrix[1] = [ matrix[1][index] + 1 for index in index_list ]
print(matrix)
这里,index_list 是需要更新的选定列的列表。我得到的输出是:
[[1, 2, 3], [5, 6], [7, 8, 9]]
我需要/预期的输出是:
[[1, 2, 3], [5, 6, 6], [7, 8, 9]]
所以,问题是,我希望只更新上面给定矩阵的第二行的第一个和第二个值,并保持第二行中的其余值不变。由于时间限制,这需要在不使用 for 循环的情况下完成。我正在尝试使用列表压缩,因为它相对较快。你能帮忙吗?我忘了说代码是在python中的,如果需要我们可以使用pandas,numpy。
解决方案
matrix[1] = [matrix[1][i] + 1 if i in index_list else matrix[1][i] for i in range(len(matrix[1]))]
这个解决方案奏效了。
推荐阅读
- javascript - 单击按钮子元素时错误的 event.target
- rest - Cosmos DB REST API 授权标头不允许我替换文档
- postgresql - cloudsqladmin 保持 CloudSQL 实例始终开启?
- bootstrap-4 - 如何正确对齐一项并使用 Bootstrap 4 保持一项居中?
- amazon-web-services - 如何在 aws EKS 中管理 pod 调度?
- spartacus-storefront - Spartacus v3:从 v2 迁移后,无法从“付款详细信息”导航到“审核订单”
- reactjs - ag-grid vs Kendo React 网格的优缺点
- vue.js - 配置文件页面组件不会显示在带有 VueJS 路由的新路由器链接上
- kubernetes - 为什么我在使用 2 个部署时收到“1 个 pod 具有未绑定的即时 PersistentVolumeClaims”
- email - 将 SAS 宏输出到文件或电子邮件附件