索引49超出大小为49 python numpy的轴0的界限
所以我完全迷路了。 我已经使用 长度=零(粒子数,数据类型=对象) 粒子数=51 打印len(长度)时,返回52 我正在链接错误: 索引49超出大小为49的轴0的界限 这是一个for循环集合索引49超出大小为49 python numpy的轴0的界限,python,debugging,Python,Debugging,所以我完全迷路了。 我已经使用 长度=零(粒子数,数据类型=对象) 粒子数=51 打印len(长度)时,返回52 我正在链接错误: 索引49超出大小为49的轴0的界限 这是一个for循环集合 for leng in range(num_particles): x_squared = (r[particle,0] - x[leng])**2 y_squared = (r[particle,1] - y[leng])**2 distance = sqr
for leng in range(num_particles):
x_squared = (r[particle,0] - x[leng])**2
y_squared = (r[particle,1] - y[leng])**2
distance = sqrt(x_squared + y_squared)
lengths[leng]=distance
整个代码如下:
def cdf(r, S, dr, dim):
from numpy import zeros, sqrt, where, pi, mean, arange, histogram, absolute, sort, delete, nonzero, amin, empty
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
num_particles = len(r)
rMax = S/2.0;
edges = arange(0., rMax + dr, dr)
num_increments = len(edges) - 1
radii = zeros(num_increments + 1)
numberDensity = len(r) / S**dim
void_particles = zeros(3, dtype=object, order='C')
x = zeros(num_particles)
y = zeros(num_particles)
n=num_particles
lengths = zeros(n + 1, dtype=object)
print(lengths)
print (num_particles)
print(len(lengths))
for pos in range(num_particles):
x[pos]=r[pos,0]
y[pos]=r[pos,1]
for particle in range(num_particles):
for leng in range(num_particles):
x_squared = (r[particle,0] - x[leng])**2
y_squared = (r[particle,1] - y[leng])**2
distance = sqrt(x_squared + y_squared)
lengths[leng]=distance
lengths = lengths[ lengths != np.min(lengths)]
void_particles[0] = r[particle]
void_particles[1] = r[where(lengths == amin(lengths))]
lengths = lengths[ lengths != np.min(lengths)]
void_particles[2] = r[where(lengths == amin(lengths))]
IndexError Traceback (most recent call last)
<ipython-input-34-74dbdb61732e> in <module>
----> 1 a=cdf(n_data, box_length, res_dr, 2)
2 print(a)
<ipython-input-33-411d9850684e> in cdf(r, S, dr, dim)
36 y_squared = (r[particle,1] - y[leng])**2
37 distance = sqrt(x_squared + y_squared)
---> 38 lengths[leng]=distance
39
40 lengths = lengths[ lengths != np.min(lengths)]
IndexError: index 49 is out of bounds for axis 0 with size 49
def cdf(右、右、右、dim):
从numpy导入零、sqrt、where、pi、mean、arange、直方图、绝对值、排序、删除、非零、amin、空
进口警告
警告。过滤器警告(“忽略”,类别=弃用警告)
粒子数=len(r)
rMax=S/2.0;
边缘=间距(0,rMax+dr,dr)
num_增量=len(边)-1
半径=零(数值增量+1)
数字密度=长度(r)/S**尺寸
void_particles=0(3,dtype=object,order='C')
x=零(粒子数)
y=零(粒子数)
n=粒子数
长度=零(n+1,数据类型=对象)
打印(长度)
打印(粒子数)
打印(长度)
对于范围内的位置(粒子数):
x[pos]=r[pos,0]
y[pos]=r[pos,1]
对于范围内的粒子(粒子数):
对于范围内的长度(粒子数):
x_平方=(r[粒子,0]-x[长度]**2
y_平方=(r[粒子,1]-y[长度]**2
距离=sqrt(x_平方+y_平方)
长度[长度]=距离
长度=长度[长度!=np.min(长度)]
void_粒子[0]=r[粒子]
void_粒子[1]=r[其中(长度==amin(长度))]
长度=长度[长度!=np.min(长度)]
void_粒子[2]=r[其中(长度==amin(长度))]
索引器回溯(最后一次最近调用)
在里面
---->1 a=cdf(n_数据、方框长度、分辨率、2)
2印刷品(a)
在cdf中(r、S、dr、dim)
36 y_平方=(r[粒子,1]-y[长度]**2
37距离=sqrt(x_平方+y_平方)
--->38长度[长度]=距离
39
40长度=长度[长度!=np.min(长度)]
索引器:索引49超出大小为49的轴0的界限
以下表达式缩短了数组:
lengths = lengths[ lengths != np.min(lengths)]
因此,随后的迭代——假设它仍然有
num_particles
元素——由于尝试越界访问而失败 在每次运行外部循环时,都不会重新初始化长度。
然后在循环内部,当您执行以下操作时:
length=length[长度!=np.min(长度)]
您正在将长度
数组缩短为小于其原始大小。然后,下一次执行循环时,它没有您预期的那么大,超出了界限。您在哪一行得到错误?Python索引是以零为基础的。第一个元素是[0]
,因此索引[49]
实际上是第五十个元素。在问题中,将完整的回溯显示为格式正确的文本。什么是r
?我的猜测是,无效访问是从r读取的,而不是从x或y读取的,但是如果不知道它是什么,很难判断。r是一个x和y坐标的数组,所以在这一部分,我试图从给定粒子中找到最短的长度。还有什么方法可以在不删除它们的情况下获取三个最短长度索引呢?因此,在这一部分中,我试图从给定粒子中找到最短长度。还有什么方法可以在不删除它们的情况下获取三个最短长度索引?@daddydeviditosorted(length)[:3]