如何将for循环输出的int值存入(n,1)格式的NumPy数组?
可行实现方案
方案1:最小改动适配你现有写法
你已经提前初始化了形状为(n,1)的目标数组,不需要调用np.insert/np.append,直接按索引赋值即可,这两个方法会新增数组元素,反而会打乱你预设的数组形状:
distmat = np.zeros((len(CoordNodesRad[:,0]), 1), int) lat = CoordNodesRad[:,0] lng = CoordNodesRad[:,1] for i in range(len(CoordNodesRad[:,0])): dist = distanceGPS(depot[0], depot[1], lat[i], lng[i]) # 直接给对应位置赋值即可实现 array[i][0] 存储第i次的dist值 distmat[i, 0] = int(dist) print(distmat)
方案2:更高效的NumPy向量化写法(无需for循环)
如果你的distanceGPS函数支持数组参数批量计算,可以完全省去循环,运行效率更高:
lat = CoordNodesRad[:,0] lng = CoordNodesRad[:,1] # 批量计算所有点的距离 all_dist = distanceGPS(depot[0], depot[1], lat, lng).astype(int) # 直接转换为 (n,1) 形状的数组 distmat = all_dist.reshape((-1, 1))
你原有代码报错的原因
np.insert会在指定位置插入新元素,会让数组总长度增加,你已经初始化了正好长度的数组,调用后会把数组变为1维、长度超出预期np.append默认会把输入数组摊平为1维再追加元素,不指定正确的axis参数也无法得到你要的(n,1)形状
内容的提问来源于stack exchange,提问作者Ansdh
相关产品推荐
相关产品推荐

