0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Numpy基礎之數(shù)組過濾功能介紹

冬至子 ? 來源:數(shù)據(jù)之書 ? 作者:databook ? 2023-08-09 16:28 ? 次閱讀

numpy中,數(shù)組可以看作是一系列數(shù)值的有序集合,可以通過下標訪問其中的元素。 處理數(shù)組的過程中,經(jīng)常需要用到數(shù)組過濾功能。

過濾功能可以在處理數(shù)據(jù)時非常有用,因為它可以使數(shù)據(jù)更加干凈和可讀性更強。 例如,在進行數(shù)據(jù)分析時,通常需要去除異常值,過濾掉不必要的元素可以使數(shù)據(jù)更加易于分析和處理。

numpy本身提供了很多針對特定要求的過濾函數(shù), 不過本篇只介紹最基本的過濾方式,通過最基本的過濾方式來揭示其過濾的原理。

比較

比較是過濾的前提,因為通過比較才能確定過濾的條件。

數(shù)組和單個數(shù)字

import numpy as np

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#運行結果
[[4 1 4]
 [7 6 1]
 [8 9 5]]

print(arr > 5)
#運行結果
[[False False False]
 [ True  True False]
 [ True  True False]]

數(shù)組和單個數(shù)字比較,也滿足上一篇介紹的廣播原則,也就是數(shù)組arr的每個元素都和數(shù)字5進行了比較。

比較的結果是和arr相同結構的數(shù)組,數(shù)組中的元素是bool值。 滿足比較條件是True不滿足比較條件的是False。

數(shù)組和數(shù)組

除了和單個數(shù)字比較之外,數(shù)組之間也是可以比較的。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[9 7 3]
 [2 8 5]
 [2 2 3]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[1 6 0]
 [0 1 8]
 [9 0 5]]

print(arr1 > arr2)
#運行結果
[[ True  True  True]
 [ True  True False]
 [False  True False]]

數(shù)組之間的比較就是相同位置的元素之間比較,如果兩個數(shù)組的結構不一樣,會按照上一篇介紹的廣播計算方式來擴充數(shù)組。 比如:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[9 6 0]
 [1 4 9]
 [1 1 4]]

arr2 = np.random.randint(0, 10, (3, 1))
print(arr2)
#運行結果
[[1]
 [0]
 [9]]

print(arr1 > arr2)
#運行結果
[[ True  True False]
 [ True  True  True]
 [False False False]]

上面的數(shù)組arr2,按廣播規(guī)則被擴充成:

[[1 1 1]

[0 0 0]

[9 9 9]]

掩碼

所謂掩碼,其實就是上面的各個示例中的比較結果。 也就是只包含bool值的數(shù)組,比如:

[[ True True False]

[ True True True]

[False False False]]

我們就是根據(jù)這個掩碼,來過濾出數(shù)組中的True 或者 False 位置的元素。

過濾

過濾就是根據(jù)掩碼,選擇出符合條件的元素。

單條件過濾

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#運行結果
[[8 4 0]
 [2 2 9]
 [9 5 9]]

print(arr[arr > 5])
#運行結果
[8 9 9 9]

最后得到的是arr中值大于5的元素數(shù)組。 其中 arr > 5 的結果就是上一節(jié)提到的掩碼,最后過濾出的元素就是根據(jù)這個掩碼得到的。

除了跟單獨的數(shù)字比較,也可以和數(shù)組比較:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[3 4 7]
 [4 6 2]
 [7 2 1]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[2 3 1]
 [7 7 7]
 [1 6 4]]

print(arr1[arr1 > arr2])
#運行結果
[3 4 7 7]

多條件過濾

多條件過濾使用 &| 來連接不同的條件。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) & (arr1 > arr2)])
#運行結果
[7 9]

過濾arr1大于5** 并且 **對應位置比arr2大的元素。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) | (arr1 > arr2)])
#運行結果
[5 7 4 9 8]

過濾arr1大于5 或者對應位置比arr2大的元素。

總結回顧

本篇主要介紹了過濾的基本原理,首先從比較開始,比較的結果是掩碼,最后通過掩碼過濾數(shù)組。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19044

    瀏覽量

    228494
  • 比較器
    +關注

    關注

    14

    文章

    1623

    瀏覽量

    107001
  • 過濾器
    +關注

    關注

    1

    文章

    424

    瀏覽量

    19485
收藏 人收藏

    評論

    相關推薦

    什么是NumPy?選擇NUMPY的原因及其工作原理是什么

    NumPy 是一個免費的 Python 編程語言開源庫,它功能強大、已經(jīng)過充分優(yōu)化,并增加了對大型多維數(shù)組(也稱為矩陣或張量)的支持。
    的頭像 發(fā)表于 07-15 09:37 ?3797次閱讀

    numpy數(shù)組的基本用法

    numpy提供了一種數(shù)據(jù)類型,提供了數(shù)據(jù)分析的運算基礎,安裝方式
    發(fā)表于 09-04 16:24 ?1232次閱讀
    <b class='flag-5'>numpy</b><b class='flag-5'>數(shù)組</b>的基本用法

    labview如何顯示5以上的數(shù)組

    用隨機數(shù)生成0-10之間的數(shù)組,怎樣把低于5以下的數(shù)組過濾掉?顯示大于或者等于5的數(shù)組。
    發(fā)表于 03-05 21:02

    過濾組、過濾器編號介紹

    一、過濾組、過濾器編號介紹 在STM32互聯(lián)型產(chǎn)品中,CAN1和CAN2分享28個過濾器組,其它STM32F103xx系列產(chǎn)品中有14個過濾
    發(fā)表于 08-20 06:13

    STM32 CAN過濾組、過濾器編號介紹

    一、過濾組、過濾器編號介紹 在STM32互聯(lián)型產(chǎn)品中,CAN1和CAN2分享28個過濾器組,其它STM32F103xx系列產(chǎn)品中有14個過濾
    發(fā)表于 08-23 06:51

    Labview自動索引功能(二維數(shù)組--一維數(shù)組

    Labview自動索引功能(二維數(shù)組--一維數(shù)組),很好的Labview資料,快來下載學習吧。
    發(fā)表于 04-19 10:56 ?0次下載

    TCP-IP詳解卷2_BPF:BSD 分組過濾程序

    TCP-IP詳解卷2 BPF:BSD 分組過濾程序,學習TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:13 ?0次下載

    Python中NumPy擴展包簡介及案例詳解

    NumPy是Python語言的一個擴展包。支持多維數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫。NumPy提供了與Matlab相似的功能
    發(fā)表于 11-15 12:31 ?1977次閱讀

    基于python的numpy深度解析

    numpy(Numerical Python)提供了python對多維數(shù)組對象的支持:ndarray,具有矢量運算能力,快速、節(jié)省空間。numpy支持高級大量的維度數(shù)組與矩陣運算,此外
    的頭像 發(fā)表于 01-24 13:55 ?5192次閱讀
    基于python的<b class='flag-5'>numpy</b>深度解析

    用于數(shù)據(jù)科學的python必學模塊Numpy的備忘單資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是用于數(shù)據(jù)科學的python必學模塊Numpy的備忘單資料免費下載。
    發(fā)表于 09-18 08:00 ?15次下載

    圖解NumPy的核心概念:向量、矩陣、3維及更高維數(shù)組

    。同時,在、、等深度許欸小框架中,了解numpy將顯著提高數(shù)據(jù)共享和處理能力,甚至無需過多更改就可以在運行計算。 n維數(shù)組NumPy的核心概念,這樣的好處,盡管一維和而為數(shù)組的處理方
    的頭像 發(fā)表于 02-11 10:01 ?5964次閱讀
    圖解<b class='flag-5'>NumPy</b>的核心概念:向量、矩陣、3維及更高維<b class='flag-5'>數(shù)組</b>

    圖文詳解NumPy看這一篇就夠了

    寫下來,讓學習過程變得輕松有趣。在Reddit機器學習社區(qū)發(fā)布不到半天就收獲了500+贊。 下面就讓我們跟隨他的教程一起來學習吧! 教程內(nèi)容分為向量?(一維數(shù)組)、矩陣?(二維數(shù)組)、三維與更高維數(shù)組3個部分。
    的頭像 發(fā)表于 05-26 09:45 ?3204次閱讀
    圖文詳解<b class='flag-5'>NumPy</b>看這一篇就夠了

    Numpy詳解-軸的概念

    NumPy數(shù)組的維數(shù)稱為秩(rank),一維數(shù)組的秩為1,二維數(shù)組的秩為2,以此類推。在NumPy中,每一個線性的
    的頭像 發(fā)表于 04-25 10:25 ?2827次閱讀

    Numpy數(shù)組的高級操作總結

    NumPy 包含一個迭代器對象numpy.nditer。它是一個有效的多維迭代器對象,可以用于在數(shù)組上進行迭代。數(shù)組的每個元素可使用 Python 的標準Iterator接口來訪問。
    的頭像 發(fā)表于 05-13 12:53 ?1296次閱讀

    List和Numpy Array有什么區(qū)別

    Numpy 是Python科學計算的一個核心模塊。它提供了非常高效的數(shù)組對象,以及用于處理這些數(shù)組對象的工具。一個Numpy數(shù)組由許多值組成
    的頭像 發(fā)表于 10-30 10:49 ?768次閱讀
    List和<b class='flag-5'>Numpy</b> Array有什么區(qū)別