numpy中的矩阵索引

螃蟹

在涉及矩阵运算的小型Python脚本的开发过程中,我感到困惑,因此我启动了一个外壳来玩一个玩具示例,并加深了对Numpy中矩阵索引的理解。

这是我所做的:

>>> import numpy as np
>>> A = np.matrix([1,2,3])
>>> A
matrix([[1, 2, 3]])
>>> A[0]
matrix([[1, 2, 3]])
>>> A[0][0]
matrix([[1, 2, 3]])
>>> A[0][0][0]
matrix([[1, 2, 3]])
>>> A[0][0][0][0]
matrix([[1, 2, 3]])

可以想象,这并没有帮助我更好地理解Numpy中的矩阵索引。这种行为对于我将其描述为“自身数组”的东西来说是有意义的,但是我怀疑任何在他们的头脑正确的人都会选择它作为科学图书馆中的矩阵模型。

那么,我获得的输出的逻辑是什么?为什么矩阵对象的第一个元素是自身?

PS:我知道如何获取矩阵的第一项。我感兴趣的是此设计决策背后的逻辑。

编辑:我不是在问如何访问矩阵元素,或者为什么矩阵行的行为类似于矩阵。我要求定义一个具有单个数字的矩阵的行为。这是数组的典型操作,但是产生的行为与您从数组中期望的行为完全不同。我想知道这是如何实现的,以及设计决策背后的逻辑是什么。

hpaulj

索引后查看形状:

In [295]: A=np.matrix([1,2,3])
In [296]: A.shape
Out[296]: (1, 3)
In [297]: A[0]
Out[297]: matrix([[1, 2, 3]])
In [298]: A[0].shape
Out[298]: (1, 3)

此行为的关键np.matrix是始终为2d。因此,即使您选择一行(A[0,:]),结果仍然是2d shape (1,3)因此,您可以随心所欲地串[0]起来,没有新的事情发生。

您想完成A[0][0]什么?一样A[0,0]吗?对于基np.ndarray类,它们是等效的。

请注意,Python解释器将索引转换为__getitem__调用。

 A.__getitem__(0).__getitem__(0)
 A.__getitem__((0,0))

[0][0]是2个索引操作,而不是一个。因此,第二种的效果[0]取决于第一种的产生。

对于数组A[0,0]等效于A[0,:][0]但是对于矩阵,您需要执行以下操作:

In [299]: A[0,:][:,0]
Out[299]: matrix([[1]])  # still 2d

============================

“本身就是一个数组”,但我怀疑任何有头脑的人会选择它作为科学图书馆中的矩阵模型。

那么,我获得的输出的逻辑是什么?为什么矩阵对象的第一个元素是自身?

另外,A [0 ,:]与A [0]不同

根据这些评论,让我提出一些澄清。

A[0]并不意味着“返回第一个元素”。表示沿第一轴选择。对于一维数组,表示第一项。对于二维数组,它表示第一行。因为ndarray那将是一个1d数组,但对于amatrix则是另一个matrix因此对于2d数组或矩阵,A[i,:]与相同A[i]

A[0]不仅返回自己。它返回一个新矩阵。不同id

In [303]: id(A)
Out[303]: 2994367932
In [304]: id(A[0])
Out[304]: 2994532108

它可能具有相同的数据,形状和步幅,但这是一个新对象。ith与多行矩阵一样唯一

大多数独特的matrix活动在中定义:numpy/matrixlib/defmatrix.py我本来建议您看一下该matrix.__getitem__方法,但是大多数操作都在中执行np.ndarray.__getitem__

np.matrix类的添加numpy是为了方便老式的MATLAB程序员。numpy数组几乎可以具有任意数量的维,即0、1...。尽管2000年左右的版本将其推广到2个或更多,但MATLAB仅允许2个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Numpy中的矩阵索引列表访问矩阵

来自分类Dev

在numpy矩阵中查找最大列值的行索引

来自分类Dev

numpy:给出矩阵的非零索引如何将元素提取到子矩阵中

来自分类Dev

通过numpy中的索引数组从另一个矩阵填充空矩阵的行

来自分类Dev

Boost中的索引矩阵

来自分类Dev

TensorFlow中的索引矩阵

来自分类Dev

TensorFlow中的索引矩阵

来自分类Dev

numpy中的矩阵乘法

来自分类Dev

遍历numpy中的矩阵

来自分类Dev

numpy中的特殊矩阵

来自分类Dev

numpy中的矩阵操作

来自分类Dev

numpy中的多维矩阵

来自分类Dev

numpy中的矩阵加法

来自分类Dev

在numpy中的混淆矩阵中获取与每种错误类型的实例对应的索引

来自分类Dev

如何使用numpy中的指定索引从3D矩阵中获取元素?

来自分类Dev

numpy根据索引选择子矩阵

来自分类Dev

Matplotlib将numpy矩阵作为0索引

来自分类常见问题

numpy:如何使用矩阵元素作为索引?

来自分类Dev

在numpy矩阵中找到给定条件的索引

来自分类Dev

索引numpy矩阵的最大值

来自分类Dev

numpy:如何使用矩阵元素作为索引?

来自分类Dev

如何找到向量化矩阵numpy的索引

来自分类Dev

numpy:矩阵数组移位/按索引插入

来自分类Dev

选择关于概率向量的 numpy 矩阵的索引

来自分类Dev

从 numpy 矩阵中提取某些索引

来自分类Dev

R中矩阵的反向索引

来自分类Dev

矩阵中的索引掩盖-MATLAB

来自分类Dev

无法在C ++中索引矩阵?

来自分类Dev

在矩阵中查找行的索引