python - python 两种形式的矩阵x[i,j]和x[i][j]的区别
问题描述
我想了解x 是矩阵之间的区别x[i,j]
和位置x[i][j]
x = np.zeros((N,M))
我在研究时发现的答案总是关于二维数组,但在我的情况下,我有一个带有两个索引的矩阵来处理 i 和 j,我需要使用 for 循环根据索引操作矩阵。
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(用户)
解决方案
对于二维数组的简单索引,两种形式都有效:
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__
。
推荐阅读
- epplus - 如果我使用 EPPlus 在一个工作表中有两个表,是否可以从特定表的 excel 文件中获取数据?
- html - 形式中的语义用法
- django - 如何在 ListView 中实现表单
- c# - 使用前缀 \\?\ 压缩长文件会导致 zip 存档无效
- c++ - 编译程序 fung-calc 的建议
- css - 当嵌套网格更改大小时,CSS 网格会更改轨道大小
- swagger - OpenAPI:必填字段、可选字段和未指定字段的混合
- python - 在基于类的视图上使用装饰器会导致 AttributeError
- javascript - Vuetify - 当用户通过多项选择完成 v-autocomplete 中的项目选择时调用方法?
- linq - 网络核心 API 控制器返回不完整的 json