首页 > 解决方案 > IndexError:创建均匀粒子时数组的索引过多

问题描述

我这里有这个函数,旨在在给定的 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

标签: pythonnumpyindex-erroruniform-distributionparticle-filter

解决方案


当我这样做时,您的此功能的代码似乎是正确的(至少,它对我有用,无需任何修改):

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)

推荐阅读