同时访问矩阵的不同元素 python :: 索引 4 的错误超出了轴 0 的范围,大小为 4 [关闭]

Posted

技术标签:

【中文标题】同时访问矩阵的不同元素 python :: 索引 4 的错误超出了轴 0 的范围,大小为 4 [关闭]【英文标题】:Access different element of matrix at the same time python :: error of index 4 is out of bounds for axis 0 with size 4 [closed] 【发布时间】:2022-01-10 03:43:24 【问题描述】:

我试图在 python 的 numpy 矩阵中同时访问不同的元素: 但是,我收到以下错误“第 5 行,在 z=y_1[x_1[i,:],0] IndexError:索引 4 超出轴 0 的范围,大小为 4" 我知道它不能使用 4 个元素,但是,有没有办法这样做来获得下面的结果......就像 matlab 中的一种方式?

import numpy as np 
x_1=np.array([[1,3,4,2]])
y_1=np.array([[0,0,0],[0,0,1],[20,0,0],[20,0,1]])
for i in range (1):
    z=y_1[x_1[i,:],0]
#z should be z=[[0],[20],[20],[0]]

matlab中的方法:

clc
x_1=[1 3 4 2]
y_1=[0 0 0;0 0 1;20 0 0;20 0 1]
for i = 1:size(x_1,1)
    z = y_1(x_1(i,:),1)
end 

【问题讨论】:

在python中,索引是从0开始的,即你也需要修改x_1。您正在访问索引 4,因为 x_1 的第三个元素在 y_1 中不存在。 @j1-lee 谢谢你的评论,但这并没有改变任何事情,我已经在考虑了 另外,range 1 不是一个有效的表达式。 @j1-lee 再次感谢您,我编辑了问题,但请您运行代码,因为这些不是问题, 我认为通过 Numpy 教程为您提供更好的服务。 【参考方案1】:

Python 索引是从 0 开始的。因此,您还需要修改“索引”向量x_1。请尝试以下操作:

import numpy as np 
# x_1 = np.array([[1,3,4,2]]) # no, python is 0-based
x_1 = np.array([0, 2, 3, 1])
y_1 = np.array([[0,0,0], [0,0,1], [20,0,0], [20,0,1]])

z = y_1[x_1, 0]
print(z) # [ 0 20 20  0]

如果您想将z 用作列向量,您可以通过z = z = y_1[x_1, 0].reshape((-1, 1)) 对其进行整形或将开头的x_1 整形:x_1 = np.array([[0], [2], [3], [1]])

【讨论】:

非常感谢您的反馈,我得到了您之前提到的内容,但是这些值 x_1 和 y_1 将自动生成,因此尺寸(大小不会固定)所以有没有当我在 matlab 中附加时,如何更动态地执行此操作?? 至于x_1,你可以在得到[1, 3, 4, 2]之类的东西后输入x_1 -= 1 至于尺寸,我没看懂。 x_1 的长度不等于y_1 的行数吗?如果是这种情况,z = y_1[x_1, 0] 会自动处理它。否则,我不知道您将如何处理差异。

以上是关于同时访问矩阵的不同元素 python :: 索引 4 的错误超出了轴 0 的范围,大小为 4 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 矩阵中查找最大元素的索引?

Python 稀疏矩阵访问元素

如何在python列表中查找某个元素的索引

Python 关于数组矩阵变换函数numpy.nonzero(),numpy.multiply()用法

如何访问 3 维矩阵元素?

Python:返回矩阵中最小值的行索引