python - 将列表转换为矩阵
问题描述
我有一个对象列表 [A, B, C, D] 我想创建一个矩阵,使得
A B C D
A
B
C
D
而每个矩阵单元格中的值是使用某种逻辑计算的(例如 (col A, row B) 的条目是 (A.val - B.Val)
我可以编写一个函数来做到这一点。但我有一种感觉,这可以用一种更简单、更好的方式来完成。
如何在python中轻松做到这一点?(可能使用 numpy?)我应该使用哪些搜索词来查找此类操作?
解决方案
一个简单的方法是使用嵌套列表推导。该操作是最内层列表推导中的表达式,可以轻松更改。
>>> vals = [1, 2, 3, 4]
>>> matrix = [[x - y for x in vals] for y in vals]
>>> matrix
[[ 0, 1, 2, 3],
[-1, 0, 1, 2],
[-2, -1, 0, 1],
[-3, -2, -1, 0]]
在这里,我使用元素之间的减法来匹配您的示例,但请注意,此语法接受对象之间的任何任意操作:
matrix = [[obj1.some_operation(obj2) for obj1 in vals] for obj2 in vals]
如果您以后需要matrix
在 numpy 中使用,您可以随时将其转换为numpy.array()
.
推荐阅读
- mysql - 如何将SQL表中的一列从短文本修改为长文本
- java - 用于查找最高元素的并行数组
- selenium - 使用 selenium 执行脚本时出错
- arrays - 在 Swift 中,如何检查数组的第一个元素是否等于值列表?
- javascript - 如何制作“身份”源图
- javascript - 如何将 XMLHttpRequest 的 setRequestHeader 读取到我的 API?
- powerbi - 循环遍历 power bi 中的可视化
- javascript - 使用 axios 时从服务器获取 json 错误响应
- c# - 从在 FormView 中绑定数据的 DropDownList 中删除重复项
- reactjs - 如何处理烧瓶中应该从反应构建返回静态文件的多个路由?