Python данных и матриц - PullRequest
       1

Python данных и матриц

0 голосов
/ 08 апреля 2020

Я создаю матрицу 5 на 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. Матрица должна иметь симметричную c, что означает, что можно заменить первый и второй столбцы (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]]

Большое спасибо за ваше время и помощь заранее!

1 Ответ

1 голос
/ 08 апреля 2020

С помощью oop, например:

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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...