如何在python中从矩阵中选择列数组

时间:2016-08-22 13:29:54

标签: python arrays numpy matrix multidimensional-array

我正在研究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

1 个答案:

答案 0 :(得分:1)

AM是非常不同的对象,因为您也发现了自己。它们可能存储相同的信息,但它们以不同的方式执行,并允许您以不同的方式操作它。它们具有不同的接口,这意味着您必须以不同方式与它们进行交互。这会影响您可以对它们执行的操作。

M是一个列表清单。它包含几个元素,每个元素都是一个整数列表。 M知道它是一个矩阵,只有知道它包含固定数量的元素。您可以使用M[i]获取单个列表,但是为了获得实际的矩阵元素,您必须使用您获得的列表。请注意,您可以执行M.append('abc'),之后M将不再是矩阵。要实际使用M作为矩阵,您需要求助于trics,例如使用col = [row[i] for row in M]来获取列,如果您需要,例如为了计算行列式,它将会非常痛苦。

A是一个矩阵,所以它可以检查它的全部内容,你可以从中获得任何你想要的元素,包括一个列。不可能在其中附加一个元素。您可以使用整个NumPy库作为矩阵对其执行操作,例如使用np.det(A)计算决定因素。