不同NumPy数组之间能否交换行或列?如何实现?
操作可行性结论
该跨子数组交换行的操作完全可实现。你所持有的是形状为(2, 3, 5)的三维NumPy数组,轴0上的两个元素分别对应两个3行5列的二维子矩阵,直接通过NumPy索引赋值即可完成任意位置行的交换,无需额外工具。
具体实现方法
首先初始化原始数组:
import numpy as np arr = np.array([ [[0, 0, 1, 0, 0], [1, 0, 0, 0, 0], [0, 0, 1, 0, 0]], [[1, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0]] ])
注意:NumPy索引从0开始计数,日常描述的第1行对应索引0,第2行对应索引1,第3行对应索引2,以下代码均按该规则对应你给出的三组预期输出。
- 交换两个子数组的第3行(对应第一组预期输出)
# 用copy()拿到行的副本,避免后续赋值覆盖原始值 temp = arr[0, 2].copy() arr[0, 2] = arr[1, 2] arr[1, 2] = temp
- 交换两个子数组的第2行(对应第二组预期输出)
temp = arr[0, 1].copy() arr[0, 1] = arr[1, 1] arr[1, 1] = temp
- 交换两个子数组的前2行(对应第三组预期输出)
temp = arr[0, 0:2].copy() arr[0, 0:2] = arr[1, 0:2] arr[1, 0:2] = temp
关键注意点:存储临时交换值时必须调用
.copy(),如果直接赋值temp = arr[0, 2]拿到的是原数组的视图,后续修改原数组时temp的值会同步变化,最终导致交换结果错误。
内容的提问来源于stack exchange,提问作者Atraxia
相关产品推荐
相关产品推荐

