Python数组运算时报numpy仅支持整数等作为索引错误如何解决
报错根因
- 你代码中
for f,i in zip(p1, mg1):遍历得到的f、i分别是p1、mg1两个数组的元素值,都是浮点数(比如p1里的0.01816861、mg1里的19.913),而numpy数组的索引必须是整数类型,用浮点数作为索引就会触发你遇到的这个报错。 - 额外说明:你原本的公式写法也存在逻辑问题,重复做了平方、开方运算,不符合你想要的逐点差值/距离计算需求。
解决方法
方法1:按索引遍历(和你原有写法逻辑最接近)
import numpy as np # 先将输入转成numpy数组(如果本身已经是numpy数组可跳过该步) p1 = np.array([0. , 0.01816861, 0.04215419, 0.05918963, 0.07256112, 0.07437664, 0.08547934, 0.09885083, 0.10157289, 0.11222232, 0.12604708, 0.12831587, 0.13941858, 0.15279007, 0.15600317, 0.15827196, 0.16616156, 0.18274616, 0.20805622, 0.20994241, 0.21228187, 0.22565337, 0.23902486, 0.25284962, 0.26576784, 0.27913933, 0.2929641, 0.30633559, 0.31813677, 0.31970708, 0.33150826, 0.34093527, 0.34487976, 0.35430676, 0.36767825, 0.38150301, 0.39487451, 0.408246, 0.42161749, 0.43498898, 0.43893347, 0.44881374, 0.45275823, 0.46612972, 0.47231072, 0.47995449, 0.48658875, 0.49077907, 0.49332598, 0.49950697, 0.50460384, 0.50669747, 0.51333174, 0.51797533, 0.52052223, 0.52670323, 0.53134682, 0.53302252, 0.54007472, 0.54471831, 0.54684728, 0.55344621, 0.56021877, 0.58252866, 0.59590015, 0.60972491, 0.61049407, 0.62309641, 0.6364679, 0.64732477, 0.65033043, 0.66164057, 0.66370193, 0.67364982, 0.67707342, 0.69044491, 0.70426967, 0.7063633, 0.71809443, 0.72064134, 0.7229808, 0.7319192, 0.73541041, 0.73963607, 0.74529069, 0.74968845, 0.75915322, 0.76222407, 0.7732561, 0.77559556, 0.78942033, 0.79601926, 0.80233855, 0.80939075, 0.82276224, 0.8295348, 0.836587, 0.85627779, 0.87055825, 0.88347404, 0.91021702, 0.91988924, 0.93745105, 0.96967349]) mg1 = np.array([19.913, 19.914, 19.898, 19.88, 19.86, 19.799, 19.785, 19.776, 19.731, 19.732, 19.689, 19.673, 19.67, 19.659, 19.632, 19.592, 19.598, 19.581, 19.565, 19.573, 19.562, 19.581, 19.553, 19.581, 19.599, 19.617, 19.658, 19.673, 19.754, 19.705, 19.792, 19.745, 19.841, 19.82, 19.834, 19.878, 19.911, 19.909, 19.942, 19.922, 19.961, 19.942, 19.965, 19.933, 19.931, 19.915, 19.955, 19.888, 19.893, 19.864, 19.888, 19.849, 19.852, 19.872, 19.855, 19.833, 19.829, 19.835, 19.801, 19.824, 19.798, 19.766, 19.771, 19.731, 19.679, 19.654, 19.628, 19.614, 19.626, 19.574, 19.615, 19.565, 19.54, 19.537, 19.61, 19.505, 19.506, 19.548, 19.567, 19.569, 19.544, 19.569, 19.583, 19.536, 19.557, 19.566, 19.583, 19.603, 19.625, 19.613, 19.634, 19.643, 19.661, 19.687, 19.708, 19.758, 19.753, 19.836, 19.891, 19.909, 19.939, 19.928, 19.969, 19.951]) d2 = [] # 从索引1开始遍历,避免i-1为负数取到数组末尾元素 for i in range(1, len(p1)): dx = p1[i] - p1[i-1] dy = mg1[i] - mg1[i-1] # 两点距离计算公式:sqrt((x差)^2 + (y差)^2) d1 = np.sqrt(dx**2 + dy**2) d2.append(d1) d = np.array(d2)
方法2:numpy向量化实现(更高效,无需手动写循环)
numpy内置的diff函数可以直接计算数组相邻元素的差值,性能远高于手动循环,代码更简洁:
import numpy as np # 同上先把p1、mg1转为numpy数组 p1 = np.array([...]) # 替换为完整p1数值 mg1 = np.array([...]) # 替换为完整mg1数值 d = np.sqrt(np.diff(p1)**2 + np.diff(mg1)**2)
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

