Numpy.where()/np.where() 函数的使用----修改数组中符合条件的元素值/查找数组中符合要求的元素的位置

numpy.where() 用法

1. np.where(condition, x, y):用于修改满足条件的元素值

用法解释:满足condition将数组元素修改为x,否则修改为y,最后生成一个新的数组。
注意:np.where不会修改原数组的数值,而会生成一个新的数组

1.1 一维数组

# 生成-5到4的一维数组
arr1 = np.arange(-5,5)
print('原数组           :',arr1)
arr2 = np.where(arr1>0,1,-1)
print('查看原数组是否修改:',arr1)
print('修改后的数组      :',arr2)

输出结果:


原数组           : [-5 -4 -3 -2 -1  0  1  2  3  4]
查看原数组是否修改: [-5 -4 -3 -2 -1  0  1  2  3  4]
修改后的数组      : [-1 -1 -1 -1 -1 -1  1  1  1  1]

如果只对一个条件进行修改:>0 保持不变,小于0变为-1
将where语句修改为如下即可:

arr2 = np.where(arr1>0,arr1,-1)

即,不修改的位置为arr原数组的值

1.2 二维数组

arr1 = np.arange(-5,5).reshape(2,5)
print('原数组',arr1,sep='\n')
arr2 = np.where(arr1>0,1,-1)
print('修改后的数组',arr2,sep='\n')

输出结果:

原数组
[[-5 -4 -3 -2 -1]
 [ 0  1  2  3  4]]
修改后的数组
[[-1 -1 -1 -1 -1]
 [-1  1  1  1  1]]

2 np.where(condition): 用于找出满足条件的元素位置(坐标)

2.1 一维数组

# 生成-5到4的一维数组
arr1 = np.arange(-5,5)
print(arr1)

arr2 = np.where(arr1>0)
print(arr2)
[-5 -4 -3 -2 -1  0  1  2  3  4]
(array([6, 7, 8, 9], dtype=int64),)

上述结果说明:arr1 > 0的元素所在的位置是[6,7,8,9]
并且arr2是个元组的类型,其中包含着数组类型的位置坐标。

print(type(arr2))
print(type(arr2[0]))
-------------------------
结果:
<class 'tuple'>
<class 'numpy.ndarray'>

2.1.1利用生成的元素进行索引数据:

法1直接利用元组索引,比较方便
法2利用数组进行索引

# 索引法1
print(arr1[arr2])
# 索引法2
print(arr1[arr2[0]])
2.1.2 不满足条件的情况
# 不满足条件
arr1 = np.arange(-5,5)
arr3 = np.where(arr1 < -5)
print(arr3)
print(arr1[arr3])
--------------------------------
结果:
(array([], dtype=int64),)
[]
2.2.1判断满足的条件的元素个数

利用数组的.size属性很好判断

arr1 = np.arange(-5,5)

arr2 = np.where(arr1 > 0)
arr3 = np.where(arr1 < -5)

print(arr2[0].size)
print(arr3[0].size)
------------------------------------
结果:
4
0
2.2二维数组

二维数组与一维数组类似,但是返回的元组中有两个数组:分别表示行的索引列的索引

arr1 = np.arange(0,10).reshape(2,5)
print(arr1)

arr2 = np.where(arr1>3)
print(arr2)
结果:
[[0 1 2 3 4]
 [5 6 7 8 9]]
(array([0, 1, 1, 1, 1, 1], dtype=int64), array([4, 0, 1, 2, 3, 4], dtype=int64))

从结果中我们可以看到,元组中的第一个数组表示的是行的索引,第二个数组是列的索引
所以满足>3的元素位置是:[0,4],[1,0],…

索引方法类似

# 索引
arr1[arr2]
-----------
array([4, 5, 6, 7, 8, 9])

3 参考文献

numpy的where方法
numpy.where的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值