同时访问矩阵的不同元素 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章