python - 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
解决方案
当我这样做时,您的此功能的代码似乎是正确的(至少,它对我有用,无需任何修改):
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)
推荐阅读
- c# - 删除空 S3 文件夹 .Net SDK
- r - 如何将列变量转换为互斥的案例行?
- c# - 通过命名管道将指向大型数组的指针从 C# 传递到 Python
- excel - 为什么我的代码不起作用?是因为 LastRow0 = .Cells(.Rows.Count, "AI").End(xlUp).row
- azure - Azure WebJob 在它自己的 AppService 中或在带有 Api 的 AppService 中
- c# - 如何从命令行将 Set(或网络)作为参数传递给 Python
- php - 在url php中解码ascii
- ios - 为什么 Geofire 在 iOS 上不起作用?- 离子
- wxpython - wx.html2.WebView 和屏幕阅读器
- google-api - 用于显示 pdf 的嵌入式 google drive api 返回 204