LINUX.ORG.RU

Как в Python ввести квадратную матрицу?

 


0

1

Здравствуйте.

В C++ ввести квадратную матрицу можно так:

for (i = 0; i < n; i++) for (j = 0; j < n; j++) cin >> a[i][j];

Как в Python ввести квадратную матрицу?

По несколько чисел в строке. Например, такую:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25


Последнее исправление: TrollBotische (всего исправлений: 1)
Ответ на: комментарий от TrollBotische

ввод с клавиатуры? Тогда input:

for i, row in enumerate(matrix):
    for j, col in enumerate(row):
        matrix[i][j] = float(input(f"Введите элемент {i}, {j}: "))
    print('\n')
vasilisk_lo
()
Последнее исправление: vasilisk_lo (всего исправлений: 1)
Ответ на: комментарий от TrollBotische

если принципиально в одной строке, то использовать метод .split() у строки, получаемой от input()

vasilisk_lo
()

matrix.txt

1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
matrix = []

with open('matrix.txt') as f:
    for line in f:
        matrix.append(line.strip().split())

print(matrix)
[['1', '2', '3', '4', '5'], ['11', '12', '13', '14', '15'], ['21', '22', '23', '24', '25']]
vvn_black ★★★★★
()
Ответ на: комментарий от Sahas
matrix = [line.strip().split() for line in Path('matrix.txt').open()]

Но, я больше за reduce, потому что любой ввод практически всегда требует какой-то обработки.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black
matrix = [[float(x) for x in line.split()] for line in open('matrix.txt')]

strip ненужен, split его и так делает.

А вот кастовать к флоту нужно.

И reduce для совсем других вещей юзается., когда из множества элементов надо получить что то одно. Здесь размерность не меняется.

ну и ТС все таки хочет работать с stdin:

matrix = [[float(x) for x in line.split()] for line in sys.stdin]
AntonI ★★★★★
()
Последнее исправление: AntonI (всего исправлений: 2)
Ответ на: комментарий от Sahas

Тогда уж

for row in matrix:
    for col in row:
        print(col, end='\t')
    print('\n')

но лучше

print('\n'.join('\t'.join(map(str, row)) for row in matrix))

Поналепят цЫклов, не продохнуть;-)

AntonI ★★★★★
()
import numpy as np

a = np.fromiter(range(1,26), float).reshape(5,5)
Archer73
()

в толерантной среде розовых пони:


from ast import literal_eval
from sys import stdin
MatrixOfTrollBotishe=literal_eval(open('fileWithTrollsMatrix').read())
qulinxao3 ★★
()
Ответ на: комментарий от AntonI

А вот кастовать к флоту нужно.

может, ТС хотел int… Но поскольку он пропал, так мы и не узнаем, чем закончилась история… :)

vasilisk_lo
()

Во всех Ваши решениях считывается весь поток.

А мне надо именно аналог cin >> a[j]

В Java есть Scanner.nextInt()

А как сделать аналогично в Python?

TrollBotische
() автор топика
Ответ на: комментарий от AntonI

Поналепят цЫклов, не продохнуть;-)

Если все эти join’s result in temporaries (ну не питонист я) - всё гораздо хуже чем цикл.

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

В питоне каждый чих это аллокация и беспощадное ворочание байт-машины. Для каждого элемента. На этом фоне, да с размерами данных как у ТС, все остальное меркнет.

В этом смысле join и генератор списков (скобочки []) хотя бы часть работы делают унутрях сей без лишних телодвижений.

Я исключительно про стиль погромирования говорил. Питон это вообще не про скорость.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Питон это вообще не про скорость.

Ну извиняйте - профдеформация… Мне мимо подобных вещей проходить трудно…

bugfixer ★★★★★
()
Ответ на: комментарий от TrollBotische

Примерно так же, только range(N) где N - число строк/столбцов.

Все равно придётся писать двойной цикл или прятать его в генераторах

AntonI ★★★★★
()
Ответ на: комментарий от bugfixer

На питоне можно очень быстро и лаконично писать код. Где то на порядок быстрее чем на плюсах. За это его и любят.

Особенно по контрасту с каким нить стандартом плюсов 2008 года на котором я сейчас вынужден сидеть в одном проекте…

А ещё питон прост и интуитивно понятен:-)

AntonI ★★★★★
()
Ответ на: комментарий от bugfixer
print('\n'.join('\t'.join(map(str, row)) for row in matrix))

Ок, что тут непонятного?:-)

AntonI ★★★★★
()
Ответ на: комментарий от TrollBotische

о нет!.. не надо так!… пожалуйста, вернись!..

P.S. Да как же тебя понять, коль ты ничего не говоришь… (с)

vasilisk_lo
()
Последнее исправление: vasilisk_lo (всего исправлений: 2)
Ответ на: комментарий от t184256

Два чая! Питон не предназначен для циклов for с итерацией по векторам. Для этого есть numpy.

Shadow ★★★★★
()
Ответ на: комментарий от TrollBotische

Придёт модератор, снесёт другую тему и уши надерет. И будет таки прав.

Что бы Вас поняли надо чётче формулировать свои запросы.

AntonI ★★★★★
()

Сегодняшний юзверь не осилит ввод когда видит только мигающий курсор. Подрубай сразу blessed, сделай «матрицу», чтобы были типа поля, и курсором между ними бегать

DumLemming ★★★
()
Ответ на: комментарий от DumLemming

Не-не, это тоже слишком сложно. Нужно распознавание с камеры смартфона, что бы навел на страничку теста и вуаля. А лучше голосовой ввод

  • Алиса, введи квадратную матрицу!
  • Квадратная матрица введена.
AntonI ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.