如何在Python中制作矩阵?

use*_*468 7 python matrix

我用Google搜索并搜索了StackOverflow和YouTube ..我只是无法在Python中使用矩阵点击我的脑袋.有人可以帮帮我吗?我只是想创建一个显示的基本5x5盒子:

A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)

我有

a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
Run Code Online (Sandbox Code Playgroud)

显示,但我甚至无法让他们打破那些,而不是所有他们会出现

[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
Run Code Online (Sandbox Code Playgroud)

如果我尝试将\n添加到它们或打印""等它只是不起作用.. \n将显示为'A \n'并且打印将显示在矩阵之前.

请有人帮助我,即使你把我引导到一个非常明显的地方,让我看起来像个白痴,我只想学习这个.

ber*_*roe 10

您的问题的答案取决于您的学习目标.如果您试图让矩阵"点击"以便以后可以使用它,我建议您查看Numpy array而不是列表.这样可以轻松地切出行,列和子集.只是尝试从列表列表中获取列,您将感到沮丧.

使用列表列表作为矩阵......

我们以您的列表列表为例:

L = [list("ABCDE") for i in range(5)]
Run Code Online (Sandbox Code Playgroud)

任何行都可以轻松获取子元素:

>>> L[1][0:3]
['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)

或者整行:

>>> L[1][:]
['A', 'B', 'C', 'D', 'E']
Run Code Online (Sandbox Code Playgroud)

但试着翻转它以获得列格式的相同元素,它将无法正常工作......

>>> L[0:3][1]
['A', 'B', 'C', 'D', 'E']

>>> L[:][1]
['A', 'B', 'C', 'D', 'E']
Run Code Online (Sandbox Code Playgroud)

你必须使用像list comprehension这样的东西来获得所有的第1个元素....

>>> [x[1] for x in L]
['B', 'B', 'B', 'B', 'B']
Run Code Online (Sandbox Code Playgroud)

输入矩阵

如果您使用数组,您将得到您期望从MATLAB或R(或大多数其他语言)的切片和索引:

>>> import numpy as np
>>> Y = np.array(list("ABCDE"*5)).reshape(5,5)
>>> print Y
[['A' 'B' 'C' 'D' 'E']
 ['A' 'B' 'C' 'D' 'E']
 ['A' 'B' 'C' 'D' 'E']
 ['A' 'B' 'C' 'D' 'E']
 ['A' 'B' 'C' 'D' 'E']]
>>> print Y.transpose()
[['A' 'A' 'A' 'A' 'A']
 ['B' 'B' 'B' 'B' 'B']
 ['C' 'C' 'C' 'C' 'C']
 ['D' 'D' 'D' 'D' 'D']
 ['E' 'E' 'E' 'E' 'E']]
Run Code Online (Sandbox Code Playgroud)

抓住第1行(与列表一样):

>>> Y[1,:]
array(['A', 'B', 'C', 'D', 'E'], 
      dtype='|S1')
Run Code Online (Sandbox Code Playgroud)

抓住第1列(新!):

>>> Y[:,1]
array(['B', 'B', 'B', 'B', 'B'], 
      dtype='|S1')
Run Code Online (Sandbox Code Playgroud)

所以现在生成你的印刷矩阵:

for mycol in Y.transpose():
    print " ".join(mycol)


A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)

  • PS你的用户名很有趣.起初它在我身上丢失了. (2认同)

Mar*_*ers 9

循环有助于:

for row in matrix:
    print ' '.join(row)
Run Code Online (Sandbox Code Playgroud)

或使用嵌套str.join()调用:

print '\n'.join([' '.join(row) for row in matrix])
Run Code Online (Sandbox Code Playgroud)

演示:

>>> matrix = [['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
>>> for row in matrix:
...     print ' '.join(row)
... 
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
>>> print '\n'.join([' '.join(row) for row in matrix])
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
Run Code Online (Sandbox Code Playgroud)

如果要显示转置的行和列,请使用该zip()函数转置矩阵; 如果将每一行作为单独的参数传递给函数,则将zip()这些值重新组合为值作为列的元组.该*args语法允许您将行作为独立参数的整个序列:

>>> for cols in zip(*matrix):  # transposed
...     print ' '.join(cols)
... 
A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)