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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

Numpy基礎(chǔ)之?dāng)?shù)組過濾功能介紹

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

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

過濾功能可以在處理數(shù)據(jù)時(shí)非常有用,因?yàn)樗梢允箶?shù)據(jù)更加干凈和可讀性更強(qiáng)。 例如,在進(jìn)行數(shù)據(jù)分析時(shí),通常需要去除異常值,過濾掉不必要的元素可以使數(shù)據(jù)更加易于分析和處理。

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

比較

比較是過濾的前提,因?yàn)橥ㄟ^比較才能確定過濾的條件。

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

import numpy as np

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

print(arr > 5)
#運(yùn)行結(jié)果
[[False False False]
 [ True  True False]
 [ True  True False]]

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

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

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

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

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

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

print(arr1 > arr2)
#運(yùn)行結(jié)果
[[ True  True  True]
 [ True  True False]
 [False  True False]]

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

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

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

print(arr1 > arr2)
#運(yùn)行結(jié)果
[[ True  True False]
 [ True  True  True]
 [False False False]]

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

[[1 1 1]

[0 0 0]

[9 9 9]]

掩碼

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

[[ True True False]

[ True True True]

[False False False]]

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

過濾

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

單條件過濾

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

print(arr[arr > 5])
#運(yùn)行結(jié)果
[8 9 9 9]

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

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

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

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

print(arr1[arr1 > arr2])
#運(yùn)行結(jié)果
[3 4 7 7]

多條件過濾

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

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

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

print(arr1[(arr1 > 5) & (arr1 > arr2)])
#運(yùn)行結(jié)果
[7 9]

過濾arr1大于5** 并且 **對應(yīng)位置比arr2大的元素。

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

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

print(arr1[(arr1 > 5) | (arr1 > arr2)])
#運(yùn)行結(jié)果
[5 7 4 9 8]

過濾arr1大于5 或者對應(yīng)位置比arr2大的元素。

總結(jié)回顧

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

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

    關(guān)注

    68

    文章

    18938

    瀏覽量

    227332
  • 比較器
    +關(guān)注

    關(guān)注

    14

    文章

    1616

    瀏覽量

    106845
  • 過濾器
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    19400
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    過濾組、過濾器編號介紹

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

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

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

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

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

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

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

    Python中NumPy擴(kuò)展包簡介及案例詳解

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

    基于python的numpy深度解析

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

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

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

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

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

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

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

    Numpy詳解-軸的概念

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

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

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

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

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