IndexError:创建均匀粒子时数组的索引过多
Posted
技术标签:
【中文标题】IndexError:创建均匀粒子时数组的索引过多【英文标题】:IndexError: too many indices for array while creating uniform particles 【发布时间】:2020-10-17 16:00:23 【问题描述】:我这里有这个函数,旨在在给定的 x 和 y 范围内创建均匀的粒子,这些范围将是 1x2 矩阵。但是,当我尝试运行它时,出现以下错误。我觉得有一种更巧妙的方法可以将 x 和 y 值分配到我的粒子矩阵中。我该如何解决这个问题?
def create_uniform_particles(x_range, y_range, N):
particles = np.empty((N, 2))
new_x = uniform(x_range[0], x_range[1], size=(N,1))
new_y = uniform(y_range[0], y_range[1], size=(N,1))
for i in range(N):
particles[i][0] = new_x[i]
particles[i][1] = new_y[i]
return particles
#错误:
Traceback (most recent call last):
File "/Users/scottdayton/PycharmProjects/Uncertainty Research/particle.py", line 83, in <module>
particle_filter(init, sigma, obs, n, trans, sigma0)
File "/Users/scottdayton/PycharmProjects/Uncertainty Research/particle.py", line 49, in particle_filter
particles = create_uniform_particles(new_x_range, new_y_range, n)
File "/Users/scottdayton/PycharmProjects/Uncertainty Research/particle.py", line 8, in create_uniform_particles
new_x = uniform(x_range[0], x_range[1], size=(N,1))
IndexError: too many indices for array
【问题讨论】:
x_range
到底是什么? “IndexError:数组索引过多”不是numpy
数组索引错误。也不是列表或元组。
这是完整的IndexError
吗?是不是有这样一行:“数组是 0 维的,但是 1 被索引了”?我的猜测是 x_range
是一个“标量”数组,例如np.array(0)
.
【参考方案1】:
当我这样做时,您的此功能的代码似乎是正确的(至少,它对我有效,无需任何修改):
create_uniform_particles([0,1],[2,3],5)
我建议验证函数中的变量在 create_uniform_particles 上一级(无论您在哪里设置 new_x_range 和 new_y_range)是您期望的形状。由于您编写的此函数适用于正确传入的输入,因此它可能发生在附近的某个地方。
在分配 x 和 y 方面,您可以使用 hstack 将 new_x 和 new_y 向量连接在一起形成一个数组。如果您更喜欢它,请在下面尝试一下。附带说明一下,hstack 的替代方案是 vstack,它将它们一个接一个地连接起来,而不是在您的情况下彼此“相邻”。
import numpy as np
from numpy.random import uniform
def create_uniform_particles(x_range, y_range, N):
particles = np.empty((N, 2))
new_x = uniform(x_range[0], x_range[1], size=(N,1))
new_y = uniform(y_range[0], y_range[1], size=(N,1))
return np.hstack([new_x,new_y])
create_uniform_particles([0,1],[2,3],5)
【讨论】:
以上是关于IndexError:创建均匀粒子时数组的索引过多的主要内容,如果未能解决你的问题,请参考以下文章
IndexError:使用 scikit-learn 绘制 ROC 曲线时数组索引过多?
尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”