#python #numpy #numpy-ndarray #mlxtend
#python #numpy #numpy-ndarray #mlxtend
Вопрос:
У меня есть такая матрица, и я хочу преобразовать ее в массив для обработки. Как это сделать
[[25 3 0 1 0 2 1]
[ 1 21 0 0 0 0 0]
[ 0 3 18 0 0 0 0]
[ 1 0 0 35 2 0 0]
[ 0 0 0 4 27 2 0]
[ 0 0 0 0 1 27 0]
[ 1 1 0 0 0 0 34]]
Я понимаю, что он должен иметь вид
[[25, 3, 0, 1, 0, 2, 1],
[ 1, 21, 0, 0, 0, 0, 0],
[ 0, 3, 18, 0, 0, 0, 0],
[ 1, 0, 0, 35, 2, 0, 0],
[ 0, 0, 0, 4, 27, 2, 0],
[ 0, 0, 0, 0, 1, 27, 0],
[ 1, 1, 0, 0, 0, 0, 34]]
Обычно то, что я делаю, это преобразую мой массив в указанную выше форму вручную и вызываю
class = np.array([[28, 3, 0, 0, 5, 2, 1],
[ 6, 25 , 0, 2, 2, 8, 0],
[ 0 , 1 ,51 , 0, 0, 0, 0],
[ 5 , 2 , 0 ,25, 12, 2, 2],
[ 1 , 0 , 0, 2, 40, 6, 0],
[ 0 , 0 , 0 ,0, 1, 48, 0],
[ 2 , 1, 0 ,0 , 1, 1, 51]])
Комментарии:
1. Хранится ли этот список в переменной в виде строки?
2. Откуда взята матрица и в каком она формате? Это недопустимый синтаксис, если вы копируете его в python.
3. @user567879 ты считываешь матрицу из файла?
4. Ваш средний блок с запятыми — это список списков, и окончательный
np.array
преобразует его правильно. Первый блок выглядит какstr
отображение массива, многострочной строки (но без кавычек).5. @Marco Да, он хранится в переменной в виде строки
Ответ №1:
Я не уверен, какой формат у вас есть при импорте матрицы, вот решение для матрицы на основе строк.
from ast import literal_eval
s = '''
[[25 3 0 1 0 2 1]
[ 1 21 0 0 0 0 0]
[ 0 3 18 0 0 0 0]
[ 1 0 0 35 2 0 0]
[ 0 0 0 4 27 2 0]
[ 0 0 0 0 1 27 0]
[ 1 1 0 0 0 0 34]]
'''
s = s.replace(" [","[").replace("[ ","[")
s = ", ".join(s.split())
ast.literal_eval(s)
# Out[12]:
# [[25, 3, 0, 1, 0, 2, 1],
# [1, 21, 0, 0, 0, 0, 0],
# [0, 3, 18, 0, 0, 0, 0],
# [1, 0, 0, 35, 2, 0, 0],
# [0, 0, 0, 4, 27, 2, 0],
# [0, 0, 0, 0, 1, 27, 0],
# [1, 1, 0, 0, 0, 0, 34]]
или в одной строке:
ast.literal_eval(", ".join(s.replace(" [","[").replace("[ ","[").split()))
Ответ №2:
Предполагая, что матрица хранится в строке, и это всегда будут целые числа, вы можете сделать:
import re
import numpy as np
my_list = """
[[25 3 0 1 0 2 1]
[ 1 21 0 0 0 0 0]
[ 0 3 18 0 0 0 0]
[ 1 0 0 35 2 0 0]
[ 0 0 0 4 27 2 0]
[ 0 0 0 0 1 27 0]
[ 1 1 0 0 0 0 34]]
"""
rows = []
for line in filter(len, map(str.strip, my_list.split("n"))):
rows.append([ int(v) for v in re.findall(r"b[0-9] b", line) ])
np_rows = np.array(rows)
В этом случае,
>>> np_rows
array([[25, 3, 0, 1, 0, 2, 1],
[ 1, 21, 0, 0, 0, 0, 0],
[ 0, 3, 18, 0, 0, 0, 0],
[ 1, 0, 0, 35, 2, 0, 0],
[ 0, 0, 0, 4, 27, 2, 0],
[ 0, 0, 0, 0, 1, 27, 0],
[ 1, 1, 0, 0, 0, 0, 34]])