Я хочу создать матрицу, например следующую;Как программировать Матрицу в Python
Я еще новичок этого языка и мне нужна помощь так сильно, благодаря
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Я хочу создать матрицу, например следующую;Как программировать Матрицу в Python
Я еще новичок этого языка и мне нужна помощь так сильно, благодаря
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Вы можете создать список списков и печатать их, как вам нравится
matrix = [[0] * 5 for _ in range(5)]
for i in range(5):
matrix[i][i] = 1
print " ".join(str(num) for num in matrix[i])
print matrix
Выход
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
Если вы планируете выполнять любую работу wi го матриц, вы должны серьезно рассмотреть возможность просмотра NumPy.
После того, как вы получите его установили:
>>> import numpy as np
>>> matrix = np.diag([1]*5)
>>> print(matrix)
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
До сих пор, не слишком интересно. Но проверьте это:
>>> print(matrix * 2)
[[2 0 0 0 0]
[0 2 0 0 0]
[0 0 2 0 0]
[0 0 0 2 0]
[0 0 0 0 2]]
>>> print(matrix + 1)
[[2 1 1 1 1]
[1 2 1 1 1]
[1 1 2 1 1]
[1 1 1 2 1]
>>> print((1 + matrix) * (1 - matrix))
[[0 1 1 1 1]
[1 0 1 1 1]
[1 1 0 1 1]
[1 1 1 0 1]
[1 1 1 1 0]]
>>> print(np.arccos(matrix)/np.pi)
[[ 0. 0.5 0.5 0.5 0.5]
[ 0.5 0. 0.5 0.5 0.5]
[ 0.5 0.5 0. 0.5 0.5]
[ 0.5 0.5 0.5 0. 0.5]
[ 0.5 0.5 0.5 0.5 0. ]]
Все эти математические вычисления и многое другое вам не нужно выполнять самостоятельно. И это обычно не менее 10 раз так быстро, как если бы вы сделали. Все это, плюс причудливое индексирование (например, нарезка по строке, столбцу или и тому и другому) и всевозможные другие вещи, которые вы еще не знаете, о которых вы хотели бы попросить, но будете.
Не могли бы вы рассказать мне, как это будет в 10 раз быстрее? – thefourtheye
@ thefourtheye: Потому что (a) он выполняет петли в C, а не в Python, (b) он часто может использовать преимущества SIMD/векторных процессоров и (c) он не имеет «box» и «unbox», значения для математики на них. Как правило, если вы можете выразить свое выражение в NumPy (без использования функции «vectorize»), это, по крайней мере, на порядок быстрее. (С PyPy вместо CPython, конечно, это меньше ... но он по-прежнему значителен, поэтому люди PyPy вкладывают столько работы в NumPyPy.) – abarnert
+1 потому что numpy> делает это вручную. –
Моего путь будет ...
Код::
size = 5
for i in range(size):
for j in range(size):
print 1 if i==j else 0,
print ''
Выход:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Надеется, что это помогает :)
Если вы просто хотите распечатать его, и не делайте с ним ничего, конечно. Но решение fourtheye (или использование библиотеки массивов, например NumPy) означает, что у вас есть матрица, с которой вы можете хранить и работать. – abarnert
Я думаю, что это является самым простым , Пожалуйста, наслаждайтесь
def fun(N):
return [[0]*x + [1] + [0]*(N-x) for x in range(N)]
print(fun(5))
Результат:
[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0]]
Это действительно должно быть в учебнике; вместо этого в учебном пособии представлены гораздо более сложные примеры понятий и 2D-индексирования, и только в случае очевидного (матричного) примера, когда ситуация становится трудной, в [Вложенные списки] (http://docs.python.org/2/tutorial/ datastructures.html # вложенных-список-постижения). – abarnert