如何在Python中生成矩阵?
我在谷歌上搜索了StackOverflow和YouTube。。我就是不能让Python中的矩阵在我的脑海中点击。有人能帮我吗?我只是想创建一个基本的5x5框,显示:如何在Python中生成矩阵?,python,matrix,Python,Matrix,我在谷歌上搜索了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 我得到 但我甚至无法让它们打断这些线,相反,它们会显示为 [['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A',
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
我得到
但我甚至无法让它们打断这些线,相反,它们会显示为
[['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']]
如果我尝试向它们添加\n或打印“”,等等,它就是不起作用\n将显示为“A\n”,并且打印将显示在矩阵之前
请有人帮帮我,即使你把我带到一个非常明显的地方,让我看起来像个白痴,我也只想学这个。循环帮助:
for row in matrix:
print ' '.join(row)
或者使用嵌套的str.join()
调用:
print '\n'.join([' '.join(row) for row in matrix])
演示:
如果要显示转置的行和列,请使用;如果将每一行作为单独的参数传递给函数,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
你问题的答案取决于你的学习目标。如果您试图让矩阵“单击”,以便稍后使用,我建议您查看Numpy
数组,而不是列表列表。这将使您可以轻松地切片出行、列和子集。只要试着从列表中获取一列,你就会感到沮丧
使用列表列表作为矩阵。。。
让我们以您的列表为例:
L = [list("ABCDE") for i in range(5)]
很容易获得任意行的子元素:
>>> L[1][0:3]
['A', 'B', 'C']
或整行:
>>> L[1][:]
['A', 'B', 'C', 'D', 'E']
但是试着反过来,以列格式获得相同的元素,它将不起作用
>>> L[0:3][1]
['A', 'B', 'C', 'D', 'E']
>>> L[:][1]
['A', 'B', 'C', 'D', 'E']
您必须使用列表理解之类的方法来获取所有第1个元素
>>> [x[1] for x in L]
['B', 'B', 'B', 'B', 'B']
输入矩阵
如果改用数组,您将获得MATLAB或R(或其他大多数语言)所期望的切片和索引:
抓取第1行(与列表一样):
抓斗柱1(新!):
现在要生成打印矩阵:
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
您还可以使用append函数
b = [ ]
for x in range(0, 5):
b.append(["O"] * 5)
def print_b(b):
for row in b:
print " ".join(row)
你可以这样做:
matrix = [["A, B, C, D, E"]*5]
print(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
循环的麻烦
def print_matrix(matrix):
for row in matrix:
new_row = str(row)
new_row = new_row.replace(',','')
new_row = new_row.replace('[','')
new_row = new_row.replace(']','')
print(new_row)
例子
以0
作为每个条目的5x5矩阵示例:
>>> test_matrix = [[0] * 5 for i in range(5)]
>>> print_matrix(test_matrix)
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
每个条目均为0
的2x3矩阵示例:
>>> test_matrix = [[0] * 5 for i in range(5)]
>>> print_matrix(test_matrix)
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
编辑
如果要使其打印:
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
我建议您改变将数据输入列表的方式。在我的方法中,较大列表中的每个列表表示矩阵中的一行,而不是列。如果不想使用numpy,可以使用列表概念。要创建任何二维数组,只需使用以下语法:
mat = [[input() for i in range (col)] for j in range (row)]
然后输入所需的值。请显示用于尝试执行此操作的代码。如果您希望对矩阵进行大量操作,您可能需要查看。如果您的列包含您想要处理的不同数据类型,您可能需要查看。@icktoofay:请参阅@Martjin:好的。我没有意识到这会对性能产生重大影响。非常感谢!这对我帮助很大:)这是一个合理的解决方案,但不会像最初发布的那样在列中打印“行”。@beroe:你知道,我似乎错过了转置;在中添加了这一点。但是,numpy数组对于非数字数据没有多大意义。我不知道?因为这样一来,它们在性能(它们将字符串存储为Python对象)或便利性(它们对于计算来说最方便)方面就买不到太多了。OP可能希望通过完成简单的任务来学习Python的基础知识,为此,使用列表是一个完美的练习。你的用户名很有趣。一开始我对它一无所知。
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
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
mat = [[input() for i in range (col)] for j in range (row)]