请求协助:完善实现列表相邻奇偶元素交换的Numpy代码
问题
需要将数组[1, 2, 3, 4, ..., 99, 100](由np.arange(1,101)生成)中所有相邻的奇偶数字交换位置,预期结果为[2, 1, 4, 3, ..., 100, 99]。现有代码运行后偶数位置元素变为0,需完善代码实现需求:
import numpy as np data=np.arange(1,101,dtype=int) for i in range(len(data)): if(i%2==1): data[i]= # 此处代码缺失 print(data)
解决方案
方法1:修正循环逻辑
原代码的问题在于直接对data[i]赋值时未保留前一个元素的原始值,且未完成交换操作。我们只需遍历所有奇数索引(从1开始,步长2),将当前元素与前一个元素交换即可:
import numpy as np data = np.arange(1, 101, dtype=int) for i in range(1, len(data), 2): # 交换当前索引i和前一个索引i-1的元素 data[i-1], data[i] = data[i], data[i-1] print(data)
方法2:Numpy向量化操作(更高效)
利用Numpy的切片特性可以避免循环,直接完成批量交换,性能更优:
import numpy as np data = np.arange(1, 101, dtype=int) # 提取偶数索引和奇数索引的元素并交换 data[::2], data[1::2] = data[1::2], data[::2].copy() print(data)
说明:data[::2]选取所有偶数索引(0,2,4...)的元素,data[1::2]选取所有奇数索引(1,3,5...)的元素,直接交换两者即可完成相邻奇偶元素的位置互换。使用.copy()是为了避免Numpy的视图引用导致的赋值异常。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

