python不改变二维数组相对位置,得到对应行(列/元素)满足条件的新数组

本文主要是介绍python不改变二维数组相对位置,得到对应行(列/元素)满足条件的新数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python不改变二维数组相对位置,得到对应行(列)满足条件的新数组

有时候,程序中会用到不改变二维数组相对位置,得到元素满足对应条件的行。

比如,给定一个坐标数组,要求剔除掉x,y坐标不满足>0条件的坐标。

引子:一维数组

对于一维数组来说,实现这个功能很简单。有多种方法可以选择。

方法一:直接法
A = np.array([1,2,3,4,5,6,0,-2,7,8,9])
result = A[A>0]
# 输出:array([1,2,3,4,5,6,7,8,9])。可以看到已经删掉了小于0的元素 
print(result) 
方法二:where()+数组切片

通过np.where()函数获取满足条件的元素所在的位置,然后利用数组切片找出。

A = np.array([1,2,3,4,5,6,0,-2,7,8,9])
ind = np.where(A>0)
result = A[ind]
# 输出:array([1,2,3,4,5,6,7,8,9])。可以看到已经删掉了小于0的元素 
print(result) 

二维数组

对于二维数组来说,使用上边两个方法都会导致数组展开成一维的,如下。

#首先生成一个2行6列的随机整数组
A= np.random.randint(-4,4,(2,6))
print("A:",A)#每次运行生成的数组不一样
#方法一:
ind = np.where(A>0)
result1 = A[ind]
print("result1:",result1)#方法二:
result2 = A[A>0]
print("result2:",result2)#方法三:同方法二,只是使用了array.nonzero()函数寻找非0索引
ind = A.nonzero()
result3 = A[ind]
print("result3:",result3)

运行结果:

A:
[[ 1 -3  0  1  3  2][ 0  1  1 -3  0  2]]
result1:
array([1, 1, 3, 2, 1, 1, 2])
result2:
array([1, 1, 3, 2, 1, 1, 2])
result3:
array([1, 1, 3, 2, 1, 1, 2])

可以看到,以上三种方法都改变了数组本来的结构。展成了一维数组。

要想维持数组本来的结构,就需要用到 all()any() 函数。

他们的实现原理是:对数组中的每个元素判断的逻辑值再按行(列)进行一个逻辑合并。

可选参数:axis

  • axis =0 列。
  • axis = 1行。

两两组合之下,可以灵活地实现四种功能。比如,对于一个二维数组A来说:

A= np.array([[1,-3,0,1,3,2],[0,1,1,-3,0,2]])
print("A:",A)ind1 = (A>0).all(0)#找出所有元素都大于零的列索引
res1 = A[:,ind1] #得到A元素中每个元素均大于0的列
print("res1:",res1)ind2 = (A>0).any(0)#找出任一元素大于零的列索引
res2 = A[:,ind2]#得到A元素中任一元素大于0的列
print("res2:",res2)ind3 = (A>0).all(1)#找出所有元素都大于零的行索引
res3 = A[ind3,:]#得到A元素中所有元素都大于0的行
print("res3:",res3)ind4 = (A>0).any(1)#找出任一元素大于零的行索引
res4 = A[ind4,:]#得到A元素中任一元素大于0的行
print("res4:",res4)

返回结果如下:

A: [[ 1 -3  0  1  3  2][ 0  1  1 -3  0  2]]res1: 
[[2][2]]res2:[[ 1 -3  0  1  3  2][ 0  1  1 -3  0  2]]res3: []res4: 
[[ 1 -3  0  1  3  2][ 0  1  1 -3  0  2]]

最后,补充一下MATLAB实现类似功能的语句:B = A(:,all(A > 0,1)) ,两者很相似,但是从语法简洁性来看,还是MATLAB更简洁一点。革命尚未成功,python仍需努力啊!

这篇关于python不改变二维数组相对位置,得到对应行(列/元素)满足条件的新数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108824

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

HDU 2159 二维完全背包

FATE 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能