我是靠谱客的博主 愤怒钢笔,最近开发中收集的这篇文章主要介绍Python快速过滤Numpy数组中特定元素的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于一个Numpy数组,有的时候我们想选取或者剔除某些符合条件的元素值,却突然发现除了一些特定的函数,如numpy.minimum()等,或者一个嵌套循环之外束手无策。其实这里有一个trick1,可以使代码有效而简洁。


让我们来到一个场景中:我们有一个名为Saliency的灰度图像数组,用来表示一张图片中受关注程度的不同。为了增强可视化效果,我们需要过滤掉数组中数值过小的元素,让其等于0,于是我们可以这么做:

>>> print saliency.shape
(227,227)
>>> idx = saliency < 0.0001
# or some other threshold value
>>> saliency[idx] = 0
# other operations ...

简单写,可以写作

>>> saliency[saliency < 0.0001] = 0
# other operations ...

我们来看看saliency < 0.0001到底生成了什么:

>>> print saliency < 0.0001
[[ True
True
True ...,
True
True
True]
[ True
True
True ...,
True
True
True]
[ True
True
True ...,
True
True
True]
...,
[ True
True
True ...,
True
True
True]
[ True
True
True ...,
True
True
True]
[ True
True
True ...,
True
True
True]]

是一个逻辑数组。


对此我们可以进行合理外推,大家可以试试,对于(227,227,3)的图像,是否可以这样处理一些某个通道里的像素点:

>>> print img.shape
(227,227,3)
>>> img[img > 200, 0] = 200

可能有人会想到,能否用这个trick来处理诸如 saliency > 0.0001 & saliency < 0.001的元素。我试了一下,这个技巧继续外推:

# Note that brackets are necessary!
saliency[(saliency>0.0001)&(saliency<0.001)] = 0

需要注意的是,List类型的变量并不支持上面所说的技巧。


当然,如果大家发现了更多的巧用,也欢迎多多交流。
2015-09-19


  1. http://stackoverflow.com/questions/21459758/numpy-faster-way-to-implement-threshold-value-ceiling ↩

最后

以上就是愤怒钢笔为你收集整理的Python快速过滤Numpy数组中特定元素的方法的全部内容,希望文章能够帮你解决Python快速过滤Numpy数组中特定元素的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部