我正在研究python,我想创建一个矩阵;通过在互联网上阅读,我发现了许多定义矩阵的方法,我决定选择这两种方法:
import numpy as np
# Method 1
w, h = 5, 5
M = [[0 for x in range(w)] for y in range(h)]
M[1][2] = 100 # ok
m = M[:,2] # <----- Why is it not possible?
# Method 2
A = np.zeros((5, 5))
A[1][2] = 100 # ok
a = A[:,2] # <----- Why is it possible?
在这两种情况下,我都可以构造矩阵,但是当我尝试通过选择矩阵本身的一列来定义数组时会出现问题。在第二种情况下,我能够定义a
我不能对m
做同样的事情;我做错了什么?
我应该怎么做才能从M中提取一列?
我认为原因在于M和A不是同一类型的变量,但老实说,我不明白其中的差异,因此我不知道如何继续。
<class 'list'> # M
<class 'numpy.ndarray'> # A
答案 0 :(得分:1)
A
和M
是非常不同的对象,因为您也发现了自己。它们可能存储相同的信息,但它们以不同的方式执行,并允许您以不同的方式操作它。它们具有不同的接口,这意味着您必须以不同方式与它们进行交互。这会影响您可以对它们执行的操作。
M
是一个列表清单。它包含几个元素,每个元素都是一个整数列表。 M
不知道它是一个矩阵,只有知道它包含固定数量的元素。您可以使用M[i]
获取单个列表,但是为了获得实际的矩阵元素,您必须使用您获得的列表。请注意,您可以执行M.append('abc')
,之后M
将不再是矩阵。要实际使用M
作为矩阵,您需要求助于trics,例如使用col = [row[i] for row in M]
来获取列,如果您需要,例如为了计算行列式,它将会非常痛苦。
A
是一个矩阵,所以它可以检查它的全部内容,你可以从中获得任何你想要的元素,包括一个列。不可能在其中附加一个元素。您可以使用整个NumPy库作为矩阵对其执行操作,例如使用np.det(A)
计算决定因素。