w3school學習筆記3(NumPy)

系列文章目錄

文章目錄

  • 系列文章目錄
  • 前言
  • 一、NumPy簡介
  • 二、NumPy入門
  • 三、NumPy創建
  • 四、NumPy數組索引
  • 五、NumPy數組裁切
  • 六、NumPy數據類型
  • 七、NumPy副本/視圖
  • 八、NumPy數據形狀
  • 九、NumPy數組重塑
  • 十、NumPy數組迭代
  • 總結


前言

一、NumPy簡介

1、什么是Numpy?
NumPy是用于處理數組的python庫。它還擁有在線性代數,傅里葉變換和矩陣領域中工作的函數。
2、為什么使用Numpy?
在python中,我沒有滿足數組功能的列表,但是處理起來很慢,Numpy旨在提供一個比傳統python列表快50倍的數組對象。NumPy中的數組對象稱為ndarray,它提供了許多支持函數,使得利用ndarray非常容易。數組在數據科學中非常常用,因為速度和資源非常重要。
注釋:
1、ndarray(對象,多維數組)
2、數據科學:計算機科學的一個分支,研究如何存儲,使用和分析數據從中獲取信息。
3、為什么Numpy比列表快?
與列表不同,NumPy數組存儲在內存中的一個連續位置,因此進程可以非常有效的訪問和操縱它們,這種行為在計算機科學中稱為引用的局部性。這是NumPy比列表快的主要原因,它還經過了優化,可與最新的CPU體系結構一同使用。
4、Numpy用哪種語言編寫?
NumPy是一個python庫,部分用python編寫,但是大多數需要快速計算的部分都是用C或C++編寫的。
5、Numpy代碼庫在哪里?
NumPy的源代碼位于github資料庫中:NumPy
github:使得許多人可以在同一個代碼庫上工作。

二、NumPy入門

1、安裝Numpy

pip install numpy #如果此命令失敗,可以使用安裝了numpy的python發行版

2、導入Numpy

import numpy

示例:

import numpy
arr = numpy.array([1,2,3,4,5])
print(arr)

Result:

[1 2 3 4 5]

3、Numpy as np
numpy通常以np別名導入

import numpy as np

示例:

import numpy as np
arr = numpy.array([1,2,3,4,5])
print(arr)

4、檢查Numpy版本

import numpy as np 
print(np.__version__)

Result:

1.21.5

三、NumPy創建

1、創建Numpy ndarray對象

numpy用于處理數組,numpy中的數組稱為ndarray,我們可以使用array()函數創建一個numpy ndarray對象。

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr)
print(type(arr))

Result:

[1 2 3 4 5]
<class 'numpy.ndarray'>

備注:type():這個內置的python函數告訴我們傳遞給它的對象的類型,它表明arr是numpy.ndarray類型。要創建ndarray,我們可以將列表、元組或任何類似數組的對象傳遞給array()方法,然后它將被轉換為ndarray。

示例:使用元組創建numpy數組

import numpy as np
arr = np.array((1,2,3,4,5))
print(arr)

Result:

[1 2 3 4 5]

數組中的維
數組中的維是數組的維度(嵌套數組)的一個級別。
嵌套數組:指的是將數組作為元素的數組。

0-D數組
0-D數組,或標量(Scalars),是數組中的元素,數組中的每個值都是一個0-D數組。

示例:用60創建0-D數組

import numpy as np
arr = np.array(60)
print(arr)

Result:

60

1-D數組
其元素為0-D數組的數組,稱為一維或1-D數組。
示例:創建包含1,2,3,4,5,6的一維數組

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr)

Result:

[1 2 3 4 5]

2-D數組
其元素為1-D數組的數組,稱為2-D數組,它們通常用于表示矩陣或二階張量,Numpy有一個專門用于矩陣運算的完整子模塊numpy.mat。
示例:創建包含值1、2、3;4、5、6兩個數組的2-D數組

import numpy as np
arr = np.array([[1,2,3],[4,5,6]])
print(arr)

Result:

[[1 2 3][4 5 6]]

3-D數組
示例:用兩個2-D數組創建一個3-D數組

import numpy as np
arr2 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr)

Result:

[[[ 1  2  3][ 4  5  6]][[ 7  8  9][10 11 12]]]

檢查維數?
NumPy數組提供了ndim屬性,該屬性返回一個整數,該整數提供了維數。

import numpy as np
arr = np.array(60)
arr0 = np.array([1,2,3,4,5,6])
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr.ndim)
print(arr0.ndim)
print(arr1.ndim)
print(arr2.ndim)

Result:

0
1
2
3

更高維數組
數組可以擁有任意維數的維,可以用ndmin參數定義維數
示例:創建5個維度的數組,并驗證

import numpy as np
arr = np.array([1,2,3,4],ndmin=5)
print(arr)
print('number of dimension :',arr.ndim)

Result:

[[[[[1 2 3 4]]]]]
number of dimension : 5

注釋:在此數組中,最里面的維度(第 5 個 dim)有 4 個元素,第 4 個 dim 有 1 個元素作為向量,第 3 個 dim 具有 1 個元素是與向量的矩陣,第 2 個 dim 有 1 個元素是 3D 數組,而第 1 個 dim 有 1 個元素,該元素是 4D 數組。

四、NumPy數組索引

訪問數組元素
數組索引等同于訪問數組元素,我們可以通過引用其索引號來訪問數組元素,Numpy數組的索引以0開頭,這意味著第一個元素索引為0,第二個索引為1;

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr[0]) #獲取第一個元素
print(arr[1]) #獲取第二個元素
print(arr[2]+arr[3]) #獲取第三個和第四個元素并相加

Result:

1
2
7

訪問2-D數組元素
要訪問二維數組中的元素,我們可以使用逗號分隔的整數表示元素的維數和索引。

import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print('2nd element on 1st dim:',arr[0,1]) #訪問第一維中的第二個元素

Result:

2

訪問3-D數組元素

import numpy as np
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr[0,1,2]) #訪問第一個數組的第二個數組的第三個元素

Result:

6

負索引
使用負索引從尾開始訪問數組

import numpy as np
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr[0,1,-2]) #訪問第一個數組的第二個數組的第三個元素

Result:

5

五、NumPy數組裁切

python中裁切的意思就是將元素從一個給定的索引帶到另一個給定的索引;
裁切數組
我們像這樣傳遞切片而不是索引:[start:end];
我們還可以定義步長:[start: end: step];
如果我們不傳遞start,則將其視為0;
如果我們不傳遞end,則視為該維度內數組長度;
如果我們不傳遞step,則視為1;
示例:從下面數組中裁切索引為1到索引為5的元素

import numpy as np
arr = np.array([1,2,3,4,5,6])
print(arr[1:5]) 

Result:

[2 3 4 5]  #結果包含了開始索引,不包含結束索引

負裁切

import numpy as np
arr = np.array([1,2,3,4,5,6])
print(arr[-4:-1]) 

Result:

[3 4 5]  #結果包含了開始索引,不包含結束索引

step
示例一:用step值確定裁切的步長

import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9])
print(arr[1:7:2]) 

Result:

[2 4 6]  #結果包含了開始索引,不包含結束索引

示例二:返回數組中相隔的元素

import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9])
print(arr[::2]) 

Result:

[1 3 5 7 9]

裁切2-D數組
示例一:從第二個元素開始,對從索引1到索引4(不包括)進行切片

import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr[1,1:4])

Result:

[7 8 9]

示例二:

import numpy as np
arr = np.array([[1,2,3,4,5],[6,7,8,9,10]])
print(arr[0:3,1:4])

Result:

[[2 3 4][7 8 9]]

六、NumPy數據類型

python中的數據類型

  • strings -用于表示文本數據,文本用引號引起來,例如:“abcd”;
  • integer -用于表示整數,例如:-1,-2,-3;
  • float -用于表示實數,例如:1.2,4.6;
  • boolean -用于表示True或False;
  • complex -用于表示復平面的數字,例如:1.0+2.4j;

NumPy中的數據類型
Numpy有一些額外的數據類型,并通過一個字符引用數據類型,例如,i代表整數,u代表無符號整數等;

  • i -整數
  • b -布爾
  • u -無符號整數
  • f -浮點
  • c -復合浮點數
  • m -timedelta
  • M -datetime
  • O -對象
  • S - 字符串
  • U - unicode 字符串
  • V -固定的其它類型的內存塊(void)

檢查數組的數據類型
numpy數組對象有一個名為dtype的屬性,該屬性返回數組的數據類型:

import numpy as np
arr = np.array([1,2,3,4,5])
arr1 = np.array(['windows','linux','mac','other'])
print(arr.dtype)
print(arr1.dtype)

Result:

int32
<U7

用已定義的數據類型創建數組
我們使用array()函數來創建數組,該函數可以使用可選參數:dtype,它允許我們自定義數組元素的預期數據類型:

import numpy as np
arr = np.array([1,2,3,4],dtype='S')
print(arr)
print(arr.dtype)

Result:

[b'1' b'2' b'3' b'4']
|S1

假如值無法轉換:
如果給出了不能強制轉換元素的類型,則Numpy將引發ValueError.
示例:無法將非整數字符串(比如’a’)轉換為整數

import numpy as np
arr = np.array(['a','1','2','3',dtype='i'])

Result:

  File ".\rumen2.py", line 87arr = np.array(['a','1','2','3',dtype='i'])^
SyntaxError: invalid syntax

轉換已有數組的數據類型
更改現有數組的數據類型的最佳方法,是使用astype()方法復制該數組。astype()函數創建數組的副本,并允許我們將數據類型指定為參數。數據類型可以使用字符串指定,例如’f’表示浮點數,'i’表示整數等,或者我們也可以直接使用數據類型,例如float&int.

import numpy as np
arr = np.array([1.1,2.1,3.1])
newarr = arr.astype('i')
print(newarr)
print(newarr.dtype)

Result:

[1 2 3]
int32

七、NumPy副本/視圖

NumPy數組副本vs視圖

  • 副本和數組視圖之間的主要區別在于副本是一個新數組,而這個視圖只是原始數據的視圖。
  • 副本擁有數據,對副本所做的任何更改都不會影響原始數組,對原始數組所做的任何更改也不會影響副本。
  • 視圖不擁有數據,對視圖所做的任何更改會影響原始數組,而對原始數組所做的任何更改都會影響視圖。

示例:進行復制,更改原始數組并顯示兩個數組
該副本不應受到對原始數組所做更改的影響

import numpy as nparr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61print(arr) 
print(x)

Result:

[61  2  3  4  5]
[1 2 3 4 5]

示例:創建試圖,更改原始數組,然后顯示兩個數組
試圖應該受到對原始數組所做更改的影響

import numpy as nparr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61print(arr) 
print(x)

Result:

[61  2  3  4  5]
[61  2  3  4  5]

檢查數組是否擁有數據
如上所述,副本擁有數據,而視圖不擁有數據,我們如何檢查?
每個NumPy數組都有一個屬性base,如果該數組擁有數據,則這個base屬性返回None.否則base屬性將引用原始對象。

import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.copy()
y = arr.view()print(x.base)
print(y.base)

Result:

None   #副本返回None,視圖返回原始數組
[1 2 3 4 5]

八、NumPy數據形狀

數組的形狀:數組的形狀是每個維中元素的數量。
獲取數組的形狀
NumPy數組有一個名為shape的屬性,該屬性返回一個數組,每個索引具有相應元素的數量。
示例:打印2-D數組的形狀

import numpy as nparr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])print(arr.shape)

Result:

(2, 4)   #2個維,每個維4個元素

示例:利用ndmin使用值1,2,3,4,的向量創建有5個維度的數組,并驗證最后一個維度的值為4

import numpy as nparr = np.array([1, 2, 3, 4], ndmin=5)print(arr)
print('shape of array :', arr.shape)

Result:

[[[[[1 2 3 4]]]]]
shape of array : (1, 1, 1, 1, 4)

元組的形狀代表什么?
每個索引處的整數表明相應維度擁有的元素數量,上例中的索引4,我們的值為4,因此可以說第5個(4+1th)維度有4個元素。

九、NumPy數組重塑

數組重塑:意味著更改數組的形狀。數組的形狀是每個維中元素的數量。通過重塑我們可以添加或刪除維度或更改每個維度中的元素數量。
從1-D重塑為2-D
示例:將以下具有12個元素的1-D數組轉換為2-D數組。最外層的維度將有4個數組,每個數組包含3個元素。

import numpy as nparr = np.array([1, 2, 3, 4], ndmin=5)print(arr)
print('shape of array :', arr.shape)

Result:

[[[[[1 2 3 4]]]]]
shape of array : (1, 1, 1, 1, 4)

十、NumPy數組迭代

數組迭代意味著逐一遍歷元素,當我們在numpy中處理多維數組時,可以使用python的基本for循環來完成此操作。
實例一:迭代一維數組元素

import numpy as np 
arr = np.array([1,2,3])
for x in arr:print(x)

實例一:迭代二維數組元素

import numpy as np 
arr = np.array([1,2,3])
for x in arr:print(x)

總結

分享:
吾所謂鐘情者,是靈魂深處一種愛慕不可得已之情。由愛而慕、慕而達則為美滿姻緣,慕而不達,則衷心藏焉,若遠若近,若存若亡,而仍不失其為真情。此所謂愛情。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線上盲盒小程序,開啟互聯網盲盒時代

近年來&#xff0c;盲盒經濟在國內非常火爆&#xff0c;各類盲盒品牌層出不窮&#xff0c;深受國內外年輕人、消費者的喜愛。 目前&#xff0c;根據數據顯示&#xff0c;盲盒市場不僅在線下異常火熱&#xff0c;線上盲盒也是成為了大眾的新選擇。各類電商平臺中盲盒的成交額更…

Esxi7Esxi8設置VMFSL虛擬閃存的大小

Esxi7Esxi8設置VMFSL虛擬閃存的大小 ESXi7,8 默認安裝會分配一個 VMFSL(VMFS-L)(Local VMFS)很大空間(120G), 感覺很浪費, 實際給 8G 就可以了, 最少 6G , 經實驗,給2G沒法安裝 . Esxi7是虛擬閃存的 修改的方法是: 在安裝時修改 設置 autoPartitionOSDataSize8192 在cdromBoo…

快捷切換raw頁面到repo頁面-Raw2Repo插件

Raw2Repo By Rick &#x1f4d6;快捷切換代碼托管平臺raw頁面到repo頁面 &#x1f517;github鏈接 https://github.com/rickhqh/Raw2Repo ?Features 功能&#xff1a; ?單擊 Raw2Repo 插件按鈕&#xff0c;即可跳轉到相應的代碼倉庫頁面。?支持 GitHub、Gitee、GitCode …

spring boot整合mybatis進行部門管理管理的增刪改查

部門列表查詢&#xff1a; 功能實現&#xff1a; 需求&#xff1a;查詢數據庫表中的所有部門數據&#xff0c;展示在頁面上。 準備工作&#xff1a; 準備數據庫表dept&#xff08;部門表&#xff09;&#xff0c;實體類Dept。在項目中引入mybatis的起步依賴&#xff0c;mysql的…

【ET8】1.ET8入門-運行指南

主要學習網址 論壇地址為&#xff1a;https://et-framework.cn Git地址為&#xff1a;GitHub - egametang/ET: Unity3D Client And C# Server Framework 官方QQ群 : 474643097 項目檢出 檢出項目切換到release8.0分支 GitHub地址&#xff1a;GitHub - egametang/ET: Unity…

[足式機器人]Part2 Dr. CAN學習筆記-數學基礎Ch0-5Laplace Transform of Convolution卷積的拉普拉斯變換

本文僅供學習使用 本文參考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN學習筆記-數學基礎Ch0-5Laplace Transform of Convolution卷積的拉普拉斯變換 Laplace Transform : X ( s ) L [ x ( t ) ] ∫ 0 ∞ x ( t ) e ? s t d t X\left( s \right) \mathcal{L} \left[ x\lef…

基于Swin_Transformer的圖像超分辨率系統

1.研究背景與意義 項目參考AAAI Association for the Advancement of Artificial Intelligence 研究背景與意義 隨著科技的不斷發展&#xff0c;圖像超分辨率技術在計算機視覺領域中變得越來越重要。圖像超分辨率是指通過使用計算機算法將低分辨率圖像轉換為高分辨率圖像的過…

AI:91-基于深度學習的手寫數學表達式識別

?? 本文選自專欄:人工智能領域200例教程專欄 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶有在本地跑過的核心代碼,詳細講解供大家學習,希望可以幫到大家。歡迎訂閱支持,正在不斷更新…

51單片機的時鐘電路與時序以及 復位電路和電源模式

51單片機的時鐘電路與時序以及 復位電路和電源模式 本文主要涉及51單片機的時鐘電路以及相關時序的知識&#xff0c;也講解了了51單片機的復位電路以及電源模式。 文章目錄 51單片機的時鐘電路與時序以及 復位電路和電源模式一、時鐘電路與時序1、 時鐘電路設計1.1 內部時鐘方式…

用stl寫一個自動打分比賽的案例

我們要實現六名選手進行隨機平均分為兩組&#xff0c;先分別淘汰兩組中的最后一名&#xff0c; 再決出第一名。 抽象選手 class player { public:string name;int score; }; 一個選手有名字和分數 首先我們需要vector容器保存選手的編號&#xff0c;便于后續的操作。 再用…

導入PR的視頻畫面是黑屏的怎么辦?

在現代視頻編輯領域中&#xff0c;越來越多的人使用Adobe Premiere Pro來編輯和制作視頻&#xff0c;但是在某些情況下&#xff0c;用戶可能需要透明背景的視頻進行創作&#xff0c;那么如何創作透明背景的視頻呢&#xff1f; 要制作具有透明背景的視頻&#xff0c;我們需要使…

如何贏得并留住訂閱者:12 個必須嘗試的訂閱營銷策略

Netflix、Hubspot、Spotify 和 Slack 都是流行的基于訂閱的服務&#xff0c;您可能每天都會使用它們&#xff0c;無論是工作還是娛樂。這些例子表明&#xff0c;訂閱業務模式深受 SaaS 創業者的青睞。 這種模式的吸引力很容易理解&#xff0c;特別是考慮到訂閱市場預計到 2025…

C //例10.5 有一個磁盤文件,內有一些信息。要求第1次將它的內容顯示在屏幕上,第2次把它復制到另一文件上。

C程序設計 &#xff08;第四版&#xff09; 譚浩強 例10.5 例10.5 有一個磁盤文件&#xff0c;內有一些信息。要求第1次將它的內容顯示在屏幕上&#xff0c;第2次把它復制到另一文件上。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差異。 代碼塊 方法&a…

mysql支持的整數類型、各類型整數能夠表示的數值范圍

MySQL :: MySQL 8.2 Reference Manual :: 11.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT mysql支持的整數有&#xff1a;TINYINT、SMALLINT、MEDIUMINT、INT&#xff08;INT和INTEGER是同義詞&#xff09;、BIGINT&#xff0c;各…

【C#】序列化和反序列化,以及System.Text.Json和Newtonsoft.Json比較

給自己一個目標&#xff0c;然后堅持一段時間&#xff0c;總會有收獲和感悟&#xff01; 序列化和反序列化&#xff0c;在實際項目開發過程中用的最多。特別是有對接接口的小伙伴就深有體會。本篇文章就簡單聊聊這個知識點。 目錄 一、基本概念1.1、序列化1.2反序列化1.3、舉例…

AI 賦能 | 智能制造的 AI 算法開發和工程實現

談到智能制造、智慧工廠&#xff0c;愿景是美好的&#xff0c;借助計算機視覺技術和 AI 算法&#xff0c;為自動化生產線賦予環境感知的能力&#xff0c;從而改善工藝流程&#xff0c;提高生產效率。但是&#xff0c;隨著柔性化生產的需求增長&#xff0c;產線的布局調整和功能…

鎖的策略及synchronized詳解

加鎖過程中&#xff0c;處理沖突的過程中&#xff0c;涉及到的一些不同的處理方式。鎖的策略決定了線程如何獲取和釋放鎖以及在何種情況下阻塞和喚醒線程。 1. 常見的鎖策略 1.1 樂觀鎖和悲觀鎖 樂觀鎖&#xff1a;在加鎖之前&#xff0c;預估當前出現鎖沖突的概率不大&am…

Docker三 | 數據卷

目錄 Docker數據卷簡介 添加數據卷的命令 容器數據卷的繼承 Docker數據卷簡介 Docker容器產生的數據&#xff0c;如果不備份&#xff0c;當容器實例刪除后&#xff0c;容器中的數據也會消失&#xff0c;為了保存數據可以在Docker中使用數據卷。Docker數據卷是宿主機的一個可以…

vue3中子組件調用父組件的方法

<script lang"ts" setup>前提 父組件&#xff1a; 子組件&#xff1a; const emit defineEmits([closeson]) 在子組件的方法中使用&#xff1a; emit(closeson)

EP15:動態內存管理概述(c語言)malloc,calloc,realloc函數的介紹使用及柔性數組的介紹

如果學習方向是c方向那么c語言有三個板塊的知識是非常重要的. 1:指針 2:結構體 3;動態內存管理. 序言:在c語言中,什么是動態內存 C語言中的動態內存是指在程序運行時&#xff0c;根據需要動態地分配內存空間的一種內存管理方式。與靜態內存相比&#xff0c;動態內存的大小和生…