首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵x[i,j]的两种形式与x[i][j]的python差异

矩阵x[i,j]的两种形式与x[i][j]的python差异
EN

Stack Overflow用户
提问于 2018-09-04 18:39:10
回答 2查看 1.6K关注 0票数 2

我想了解x[i,j]x[i][j]之间的区别,其中x是一个矩阵

代码语言:javascript
复制
x = np.zeros((N,M))

在做研究时,我发现的答案总是关于2D维数的数组,但在我的例子中,我有一个具有两个索引的矩阵来处理i和j,并且我需要使用for循环根据索引来操作矩阵。

代码语言:javascript
复制
    for i in range(1,N+1):
        for j in range(1,M+1):
            x[i-1][j-1]=random.uniform(5,10)

所以你能帮我理解一下x[i,j]x[i][j]之间的区别吗?更清楚的是,每个i(基站)都有j(用户)的数量。

EN

回答 2

Stack Overflow用户

发布于 2018-09-04 23:30:28

对于2d数组的简单索引,两种形式都有效:

代码语言:javascript
复制
In [28]: x = np.arange(6).reshape(2,3)
In [29]: x
Out[29]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [30]: x[1,2]
Out[30]: 5
In [31]: x[1][2]
Out[31]: 5

对于np.matrix (您可能无论如何都不应该使用它),它们不是:

代码语言:javascript
复制
In [32]: X = np.matrix(x)
In [33]: X
Out[33]: 
matrix([[0, 1, 2],
        [3, 4, 5]])
In [34]: X[1,2]
Out[34]: 5
In [35]: X[1][2]
...
IndexError: index 2 is out of bounds for axis 0 with size 1

这两种形式在语法上并不相同。[1][2]首先使用1进行索引,然后使用2对结果进行索引。这与同时使用两个参数进行一次索引不同。

代码语言:javascript
复制
In [36]: x[1]
Out[36]: array([3, 4, 5])      # (3,) shape
In [37]: X[1]
Out[37]: matrix([[3, 4, 5]])   # (1,3) shape

出现这个错误是因为np.matrix返回了另一个np.matrix。因此,下一个[2]索引将再次索引第一个维度。

x[1]实际上是x[1,:]的缩写,即对第一个维度建立索引,然后对其余所有维度进行切片(或者对X[1,...]进行切片,以支持3d和更高的维度)。所以x[1][2]真的是

代码语言:javascript
复制
temp = x[1,:]
temp[2]

或者对于矩阵的情况:

代码语言:javascript
复制
temp = X[1,:]
temp[2,:]

换句话说,它是2个索引操作。它是一个Python表达式,而不是特定的numpy用法。

当我们使用列表或切片进行索引时,两种形式之间的差异变得更加明显,特别是在设置值时。

我鼓励初学者使用x[i,j]表单。除非您真正了解发生了什么,否则不要使用x[1][2]

如果需要,我可以研究如何将索引转换为对__setitem____getitem__的调用。

票数 1
EN

Stack Overflow用户

发布于 2018-09-04 18:47:20

根据Numpy v1.15.1 manual,它们是等效的

注释在Python中,x(exp1,exp2,...,expN)等同于xexp1,exp2,...,expN;后者只是前者的语法糖。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52164376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档