Abaqus中基于3D坐标点计算样条曲线长度的索引越界问题求助
错误原因
你创建的N是二维数组,形状为(1, n)(n为坐标点数量,此处为19),第一个维度(轴0)的长度只有1,而循环变量j的取值范围是0到17,当j>=1时访问N[j]等价于访问轴0的第j个元素,自然触发越界报错。同时后续sum[N]的写法也存在语法错误,sum是函数需要用括号传参。
修复方案
方法1:最小改动修复原有逻辑
直接将N定义为长度匹配相邻点对数的一维数组,同时修正求和语法:
# 19个点共有18段相邻距离,N长度设为len(CoGZ_Init)-1即可 N = np.zeros(len(CoGZ_Init)-1) for j in range(0, len(CoGZ_Init)-1): x1 = CoGX_Init[j] x2 = CoGX_Init[j+1] y1 = CoGY_Init[j] y2 = CoGY_Init[j+1] z1 = CoGZ_Init[j] z2 = CoGZ_Init[j+1] N[j] = np.sqrt((x2-x1)**2+(y2-y1)**2+(z2-z1)**2) # 求和用函数括号,numpy数组直接用np.sum效率更高 print(np.sum(N))
方法2:更简洁的向量化实现(无需循环)
用numpy内置的差分函数直接计算所有相邻点的差值,再批量求距离累加:
# 分别计算x/y/z三个方向的相邻点差值 dx = np.diff(CoGX_Init) dy = np.diff(CoGY_Init) dz = np.diff(CoGZ_Init) # 批量计算所有段的距离再求和 total_length = np.sum(np.sqrt(dx**2 + dy**2 + dz**2)) print(total_length)
内容的提问来源于stack exchange,提问作者JetskiS
相关产品推荐
相关产品推荐

