python - Python 数据和矩阵
问题描述
我创建了一个 5 x 5 矩阵,如下所示:
a = [[0 for y in range(5)] for x in range(5)]
print(a)
我有一个文件 input.dat
1 2 NA
1 4 6
1 5 1
2 3 NA
3 3 10
4 5 5
使用这个文件,我需要填充我的矩阵,这样如果第 3 列的值小于或等于 5,矩阵输入的值应该为 1。矩阵应该是对称的,这意味着可以交换第一列和第二列(1,3) = (3,1)
。如果值为 NA,则该值应保持为零。如果没有对,则该值应保持为零(例如,所示矩阵中的 (1,3) 为零。最终产品应如下所示:
[[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 0, 1, 0, 0]
[1, 0, 0, 0, 1]
[0, 0, 0, 1, 0]]
非常感谢您的时间和提前帮助!
解决方案
使用这样的循环:
index = [(1, 2), (1, 4), (1, 5), (2, 3), (3, 3), (4, 5)]
condition = ['Na', 6, 1, 'Na', 10, 5]
for i in range(len(index)):
if condition[i] != 'Na' and condition[i] <= 5:
m, n = index[i][0] - 1, index[i][1] - 1
a[m][n] = 1
a[n][m] = 1
你可以得到以下结果
[[0, 0, 0, 0, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1],
[1, 0, 0, 1, 0]]
您提供的解决方案有误。(1, 4) <= 5 --> False --> a[1, 4] = 0
应该是这样。
这是使用pandas读入的数据。
import pandas as pd
data = pd.read_csv('input.dat', sep=' ')
data.Na = data.Na.apply(lambda x: int(x) if not x == 'Na' else 0)
for i in range(len(data)):
if data.Na[i] != 'Na' and data.Na[i] <= 5:
m, n = data.iloc[i, 0] - 1, data.iloc[i, 1] - 1
a[m][n] = 1
a[n][m] = 1
也提供了解决方案:
a =
[[0, 0, 0, 0, 1],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 1],
[1, 0, 0, 1, 0]]
推荐阅读
- java - Java函数没有返回预期值
- shell - 无法从 Makefile 调用函数
- kubernetes - 节点成功加入主节点,但当 kubectl get nodes “与服务器 localhost:8080 的连接被拒绝”时出错
- windows - CoCreateInstance 返回“未注册 REGDB_E_CLASSNOTREG 类”
- c++ - 为什么显示 QProgressDialog 时没有显式调用 `exec()` 或 `show()`?
- visualization - Graphviz:左右子图,子图中的左右
- c# - Blazor 触发自定义验证消息
- sql-server - SQL CMD:使用括号和单引号传递变量
- linux - 在 POSIX shell (/bin/sh) 中处理变量范围(while 循环中的管道)?
- regex - Powershell中的正则表达式以排除所有以文本开头的新行