2013-11-20 3 views

ответ

2

Вы можете создать список списков и печатать их, как вам нравится

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]] 
+0

Это действительно должно быть в учебнике; вместо этого в учебном пособии представлены гораздо более сложные примеры понятий и 2D-индексирования, и только в случае очевидного (матричного) примера, когда ситуация становится трудной, в [Вложенные списки] (http://docs.python.org/2/tutorial/ datastructures.html # вложенных-список-постижения). – abarnert

2

Если вы планируете выполнять любую работу 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 раз так быстро, как если бы вы сделали. Все это, плюс причудливое индексирование (например, нарезка по строке, столбцу или и тому и другому) и всевозможные другие вещи, которые вы еще не знаете, о которых вы хотели бы попросить, но будете.

+0

Не могли бы вы рассказать мне, как это будет в 10 раз быстрее? – thefourtheye

+0

@ thefourtheye: Потому что (a) он выполняет петли в C, а не в Python, (b) он часто может использовать преимущества SIMD/векторных процессоров и (c) он не имеет «box» и «unbox», значения для математики на них. Как правило, если вы можете выразить свое выражение в NumPy (без использования функции «vectorize»), это, по крайней мере, на порядок быстрее. (С PyPy вместо CPython, конечно, это меньше ... но он по-прежнему значителен, поэтому люди PyPy вкладывают столько работы в NumPyPy.) – abarnert

+0

+1 потому что numpy> делает это вручную. –

0

Моего путь будет ...

Код::

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 

Надеется, что это помогает :)

+0

Если вы просто хотите распечатать его, и не делайте с ним ничего, конечно. Но решение fourtheye (или использование библиотеки массивов, например NumPy) означает, что у вас есть матрица, с которой вы можете хранить и работать. – abarnert

0

Я думаю, что это является самым простым , Пожалуйста, наслаждайтесь

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]] 
Смежные вопросы