Numpy数组行交换函数失效,请求排查问题原因
为什么我的NumPy数组行交换函数无法工作?
你的代码失效的核心原因是NumPy数组的切片返回的是原数组的视图,而非独立的副本。
看你代码里的这行:
temp = M_copy[row_num_1]
这里的temp并不是M_copy[row_num_1]的完整拷贝,它只是指向该行数据的一个引用。当你执行M_copy[row_num_1] = M_copy[row_num_2]后,temp会同步变成M_copy[row_num_2]的值——因为它们指向同一块内存。最后执行M_copy[row_num_2] = temp时,相当于把M_copy[row_num_2]的值重新赋给自己,等于没完成交换操作。
解决办法
有两种简单的修复方式:
1. 为临时变量创建独立副本
给切片结果调用.copy(),让temp成为真正独立的数组:
import numpy as np def SwapRows(M: np.ndarray, row_num_1: int, row_num_2: int) -> np.ndarray: M_copy = M.copy() # 创建行的独立副本,避免引用共享 temp = M_copy[row_num_1].copy() M_copy[row_num_1] = M_copy[row_num_2] M_copy[row_num_2] = temp return M_copy
2. 利用NumPy高级索引直接交换
这种方式更简洁高效,不需要临时变量,NumPy会自动处理索引对应元素的交换:
import numpy as np def SwapRows(M: np.ndarray, row_num_1: int, row_num_2: int) -> np.ndarray: M_copy = M.copy() # 通过索引直接交换两行 M_copy[[row_num_1, row_num_2]] = M_copy[[row_num_2, row_num_1]] return M_copy
内容的提问来源于stack exchange,提问作者David Nduonofit
相关产品推荐
相关产品推荐

