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:数组索引过多”

如何解决“IndexError:数组索引过多”

IndexError:数组的索引过多:数组是二维的,但有 3 个被索引

SVC 的网格搜索:IndexError:数组索引过多

IndexError:数组的索引过多