矩阵x [i,j]和x [i] [j]两种形式之间的python差异

时间:2018-09-04 10:39:10

标签: python numpy matrix

我想了解naive_utc = utc.replace(tzinfo=None) # datetime.datetime(2018, 9, 15, 13, 30) x[i,j]之间的区别,其中x是矩阵

x[i][j]

我在进行研究时发现的答案始终是关于二维尺寸的数组,但是在我的情况下,我有一个带有两个索引的矩阵以与i和j一起工作,而我需要使用for循环根据索引来操纵矩阵

x = np.zeros((N,M))

所以您能帮助我理解 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]之间的区别吗?为了更清楚地了解每个i(基站)有j个(用户)

2 个答案:

答案 0 :(得分:1)

对于2d数组的简单索引编制,两种形式都可以工作:

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(无论如何您都不应使用),它们不是:

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索引结果。这与用两个参数一次索引不同。

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]确实是

temp = x[1,:]
temp[2]

或对于矩阵情况:

temp = X[1,:]
temp[2,:]

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

当我们用列表或切片建立索引时,两种形式之间的差异变得尤为重要,尤其是在设置值时。

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

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

答案 1 :(得分:-3)

根据Numpy v1.15.1 manual

  

注意   在Python中,x [(exp1,exp2,...,expN)]等效于x [exp1,exp2,...,expN];后者只是前者的语法糖。