如何在Python中合并两行切片部分生成新行并存入二维数组?
解决Numpy拼接时的索引错误问题
我来帮你搞定这个问题!你遇到的only integer scalar arrays can be converted to a scalar index错误,根源是np.concatenate的用法不对,再加上分割点的计算有点小问题,下面一步步给你讲清楚怎么修复:
先从你的示例入手验证
先拿你给出的测试数组跑通逻辑,确保结果符合预期:
import numpy as np values = np.array([[1,2,3,4],[5,6,7,8]]) x = values.shape[1] split_point = x // 2 # 用整数除法实现对半分割,x=4时得到2,刚好取前两个元素 # 提取第一行前半、第二行后半 first_half = values[0, :split_point] second_half = values[1, split_point:] # 拼接成新数组 new_row = np.concatenate([first_half, second_half]) print(new_row) # 输出: [1 2 7 8]
错误原因分析
你原来的代码里,np.concatenate的调用方式错了:
# 错误写法:把两个数组作为独立参数传入 np.concatenate(values[temp0,0:int((x-1)/2)],values[temp1,int((x-1)/2):x+1])
np.concatenate要求第一个参数是数组的可迭代对象(比如列表或元组),而不是两个单独的数组参数。这就是导致索引错误的直接原因。
另外,你用int((x-1)/2)计算分割点也不太合理:比如x=4时,这个式子得到1,只会取前1个元素,和你示例里要的前半部分(2个元素)不符。换成x//2(整数除法)能更准确地实现“对半分”的需求,不管x是奇数还是偶数都能适用。
修正后的完整代码
结合你的实际场景(values是(100,x)的二维数组,temp0、temp1是整数索引),修正后的代码如下:
import numpy as np # 假设你的values、pop、temp0、temp1、y都已正确定义 x = values.shape[1] split_point = x // 2 # 计算对半分割的位置 # 提取需要的两段并拼接 combined_row = np.concatenate([ values[temp0, :split_point], # 取temp0行的前半部分 values[temp1, split_point:] # 取temp1行的后半部分 ]) # 将拼接后的数组赋值给pop的第y行 pop[y, :] = combined_row
这样就能完美实现你想要的效果:取指定两行的各一半,拼接成新行存入目标二维数组啦。
内容的提问来源于stack exchange,提问作者Noel DSouza
相关产品推荐
相关产品推荐

