大家好,给大家分享一下python将两个整数合并成一个,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
问题描述
使用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]])
因此,那我们只需要调换索引的位置,然后取出就可以实现两行的交换python编程代码大全。
需要注意的是,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]])