【问题标题】:How to selecting column arrays from matrix in python如何从python中的矩阵中选择列数组
【发布时间】:2016-08-22 13:29:53
【问题描述】:

我正在自学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

【问题讨论】:

  • 要从 M 中提取一列,请使用 m = [sub[2] for sub in M]
  • Numpy 是一个支持这些索引的库。 Python 列表没有。您可以使用M = np.array(M) 将该列表转换为 numpy 数组,您可以使用第二种方法。
  • 好的,谢谢,问题解决了

标签: python arrays numpy matrix multidimensional-array


【解决方案1】:

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

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

A 是一个矩阵,因此它可以检查其全部内容,并且您可以从中获取任何您想要的元素,包括单列。不可能将一个元素附加到它。您可以使用整个 NumPy 库将其作为矩阵执行操作,例如使用 np.det(A) 计算行列式。

【讨论】:

  • “列表”是否有点像 matlab 中的“单元格”?
  • 是的,list 就像 matlab 中的一维元胞数组,因为每个元素都可以是任何类型。
猜你喜欢
  • 2017-02-16
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
相关资源
最近更新 更多