Python 实现Numpy数组对象某两行或两列的交换

您所在的位置:网站首页 python求二维数组行数 Python 实现Numpy数组对象某两行或两列的交换

Python 实现Numpy数组对象某两行或两列的交换

2024-03-18 19:53| 来源: 网络整理| 查看: 265

问题描述

使用Numpy生成的数组对象,有时候会遇到需要交换特定的两行或者两列需求,如何实现这种呢?

分析思路

在Python交换两个值如何实现呢?如下

a=3;b=2 a,b=b,a

那交换数组对象两行或两列是不是也可以直接使用这种方法呢?还有没有其它办法呢?

实现 01使用python中交换值的思想

首先生成一个4x4的数组,需要交换第一行和第二行

import numpy as np arr=np.arange(16).reshape(4,4)

arr数组结果为

array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15]])

利用numpy的数组对象的高级索引(关于数组索引请看这篇文章 numpy索引官方文档 中文) 取出第一行和第二行进行交换。

# [0,1]表示为第一行、第二行,逗号前是表示行的参数,逗号后的表示列,冒号表示所有列 arr[[0,1],:]=arr[[1,0],:] print(arr) # 结果如下 array([[ 4, 5, 6, 7], [ 0, 1, 2, 3], [ 8, 9, 10, 11], [12, 13, 14, 15]])

此处值得注意的是,此处交换是直接作用于arr原数组,如果不想对原数组修改,可以在交换之前,使用 np.copy(arr) 生成数组的副本,然后对副本进行修改 如果需要交换两列,代码类推

arr=np.arange(16).reshape(4,4) arr_col=arr.copy(arr) arr_col[:,[0,1]]=arr_col[:,[1,0]] print("arr: \n",arr) print("arr_col: \n",arr_col)

运行结果如下

arr: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] arr_col: [[ 1 0 2 3] [ 5 4 6 7] [ 9 8 10 11] [13 12 14 15]] 02 使用索引 直接生成

在前面,我们可以直接用arr[[1,0],:] 按照[1,0]的顺序取出第二行和第一行,如下

print(arr[[1,0],:]) # 运行结果 array([[4, 5, 6, 7], [0, 1, 2, 3]])

因此,那我们只需要调换索引的位置,然后取出就可以实现两行的交换。 需要注意的是,arr[[1,0],:] 只是按照自定义的顺序取出,并没有直接修改原数组,所以我们需要赋值给一个新的对象保存

arr_row=arr[[1,0,2,3],:] print(arr_row)

运行结果如下

array([[ 4, 5, 6, 7], [ 0, 1, 2, 3], [ 8, 9, 10, 11], [12, 13, 14, 15]])


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3