当前位置:   article > 正文

【Python】numpy方法合辑-数组查询定位_numpy找到在数组中的位置

numpy找到在数组中的位置

(一)argmax

numpy.argmax(a, axis=None, out=None)
# 返回沿轴的最大值的索引
#3在多次出现最大值的情况下,返回对应于第一次出现的索引。

# 参数
"""
a:数组
axis=None:默认情况下,将数组展平成一维数组,然后返回最大值的索引
"""

#demo
arr = np.arange(9).reshape(3, -1)
print(arr)
print(np.argmax(arr))  # 8 将数组展平成一维数组,然后返回最大值的索引
print(np.argmax(arr, axis=0)) # [2 2 2]

arr = np.array([1, 10, -1, 0, 6, np.nan]).reshape(2,3)
print(arr)
print(np.argmax(arr)) # 5 最大值为np.nan
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(二)nanargmax

numpy.nanargmax(a, axis=None)
# 返回指定轴中的最大值的索引,忽略NAN

# 参数
"""
a:数组
axis=None:默认情况下,将数组展平成一维数组,然后返回最大值的索引
"""

#demo
arr = np.array([1, 10, -1, 0, 6, np.nan]).reshape(2,3)
print(arr)
print(np.nanargmax(arr))  # 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(三)argmin

numpy.argmin(a, axis=None, out=None)
# 返回沿轴线的最小值的索引。
#用法与argmax类似
  • 1
  • 2
  • 3

(四)nanargmin

numpy.nanargmin(a, axis=None)
# 返回指定轴中的最小值的索引,忽略NAN
#用法与argmin类似
  • 1
  • 2
  • 3

(五)argwhere

numpy.argwhere(a)
# 返回满足条件a的元素的索引

#demo
arr = np.array([1, 10, -1, 0, 6,7]).reshape(2, 3)
print(arr)
indexer = np.argwhere(arr > 0)
print(indexer)
"""
[[0 0]
 [0 1]
 [1 1]
 [1 2]]
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(六)nonzero

numpy.nonzero(a)
#返回一个由每个维度非零元素索引组成的元组

# 参数
# a:条件

# demo
x = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])
indexer = np.nonzero(x)
print(indexer)
# (array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
print(x[indexer])
# [3 4 5 6] 根据索引获得元素 与argwhere不同,argwhere无法直接得到元素
print(np.transpose(indexer))  # 同 np.argwhere(x)

# 使用具体条件
print(np.nonzero(x>0))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

(七)where

numpy.where(condition[, x, y])
# 根据条件从x或y中选择返回元素。

# 参数
# condition:条件,返回布尔数组,True则为x,False则为y

 #demo
a = np.arange(10)
print(np.where(a > 5, a * 10, a))
# [ 0  1  2  3  4  5 60 70 80 90]

a = np.arange(10)
print(np.where(a > 5))  # 返回索引(array([6, 7, 8, 9], dtype=int64),)

print(a > 5)   #布尔数组
# [False False False False False False  True  True  True  True]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

(八)searchsorted

numpy.searchsorted(a, v, side='left', sorter=None)
#在数组a中插入数组v(并不执行插入操作),返回一个下标列表,这个列表指明了v中对应元素应该插入在a中那个位置上

#参数
"""
a : 1-D array_like、
输入数组。当sorter参数为None的时候,a必须为升序数组;
否则,sorter不能为空,存放a中元素的index,用于反映a数组的升序排列方式。

v : array_like
插入a数组的值,可以为单个元素,list或者array。

side : {'left', 'right'}, 默认left
对于left,返回的是与这个元素相等的元素的位置
对于right,返回的是与这个元素相等的元素的下一个位置
没有符合的元素,
如果这个元素比a的最小值还小,就返回0,
如果比a的最大值还大,就返回数组a的长度N
如果这个不存在的元素位于数组a的中间时,返回第一个比它大的那个元素的位置

sorter : 1-D array_like,
存放a数组元素升序排序的index。使用argsort获得
"""

# demo
a = np.array([-1, 0, 1, 4, 10, 19])  # a按照升序
print(np.searchsorted(a, 1))  # 2
print(np.searchsorted(a, 1, side='right'))  # 3
print(np.searchsorted(a, 9))  # 4

a = np.array([1, 6, 0, 2, 10, 11])  # a未排序
indexer = np.argsort(a)
print(np.searchsorted(a, 6, sorter=indexer))  # 3
print(np.searchsorted(a, [0, 6, 9], sorter=indexer))  # [0 3 4]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

(九)extract

numpy.extract(condition, arr)
# 返回满足某些条件的数组元素。

#参数
"""
condition:条件,返回布尔数组,
arr:与条件大小相同的输入数组
"""

#demo
arr = np.array([1, 10, -1, 0, 6, 7]).reshape(2, 3)
print(np.extract(arr > 0, arr))
print(np.where(arr > 0))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/357259
推荐阅读
相关标签
  

闽ICP备14008679号