Python模塊(2)-Numpy 簡易使用教程

Numpy模塊 簡易使用教程

  • 1.數組創建
  • 2.數組基本屬性-維度、尺寸、數據類型
  • 3.數組訪問-索引、切片、迭代
  • 4.數組的算術運算-加減乘除、轉置求逆、極大極小
  • 5.通用函數-sin,cos,exp,sqrt
    • np.dot與np.matmul的區別
  • 6.數組的合并和分割
    • 6.1 np.vstack(),np.hstack()
    • 6.2 np.stack()
  • 7.list與數組相互轉換
    • 7.1 list() vs tolist()
  • 8.np.random
    • 8.1 randn()和rand()
    • 8.2np.random.choice()
    • 8.3 np.random.uniform()
  • 9.常用方法
    • x.astype(int)
    • np.squeeze()
    • np.std()
    • np.prob()
    • array.copy()
    • np.linspace()
    • np.vstack()
    • np.c_ ()
    • arr.ravel()

Numpy 是pythond科學計算的基礎模塊,常被用作多維數據容器,能夠完成基本的科學計算操作

1.數組創建

import numpy as np# 1.創建數組
arr1 = np.array([1, 2, 3])
arr2 = np.array([(1.3, 9, 2.0), (7, 6, 1)])
arr3 = np.zeros((2, 3))
arr4 = np.identity(3) # 三維度單位陣
arr5 = np.random.random(size=(2, 3))

2.數組基本屬性-維度、尺寸、數據類型

# 2.數組屬性
print(arr2.shape)   # 矩陣的形狀 (2, 3)
print(arr2.ndim)    # 矩陣的秩 2
print(arr2.size)    # 矩陣所有元素個數 6
print(arr2.dtype.name) # 矩陣中元素的類型 float64

3.數組訪問-索引、切片、迭代

# 3.數組訪問
print(arr2[:1,:1])   # [[1.3]] 
for row in arr2:print(row)
for element in arr2.flat:print(element)

4.數組的算術運算-加減乘除、轉置求逆、極大極小

# 4.數組運算
arr9 = np.array([[2, 1], [1, 2]])
arr10 = np.array([[1, 2], [3, 4]])
# 逐元素的+,-,*,/,%,操作
print(arr9 - arr10)
print(arr9**2)
print(arr9 * 3)
print(arr9 * arr10)         # 等價于 np.multiply(arr9, arr10)
print(np.dot(arr9, arr10))  # 矩陣叉積, 在二維度的情況下和矩陣乘積的結果一致
print(np.matmul(arr9, arr10))  # 矩陣乘積
# 矩陣轉置,求逆,求和,求極大,求極小
print(arr9.T)
print(np.linalg.inv(arr9))
print(arr9.sum(), arr9.max(), arr9.min())  # 6 2 1

5.通用函數-sin,cos,exp,sqrt

# 5.通用函數sin,cos,都是針對整個數組逐元素操作
print(np.exp(arr9))
print(np.sin(arr9))
print(np.sqrt(arr9))

np.dot與np.matmul的區別

在二維度的情況下和矩陣乘積的結果一致

print(np.dot(arr9, arr10))  # 矩陣叉積, 
print(np.matmul(arr9, arr10))  # 矩陣乘積

參考博文:https://blog.csdn.net/acterminate/article/details/96151132

6.數組的合并和分割

# 6.數組的合并和分割
arr11 = np.vstack((arr9, arr10))  # 縱向合并,沿著第0維度合并
arr12 = np.hstack((arr9, arr10))  # 橫向合并,沿著第1維度合并
print(np.vsplit(arr12, 2))        # 縱向切割
print(np.hsplit(arr12, 2))        # 橫向切割

6.1 np.vstack(),np.hstack()

np.vstack()沿著第0維度堆疊
np.hstack()沿著第1維度堆疊

只有兩個維度:
np.vstack(tuple)垂直方向堆疊成numpy.array
np.hstack(tuple)水平方向堆疊成numpy.array

注意:
tuple=(a1,a2,a3,…an)
a1,a2,a3,…an除了堆疊的那個維度,剩余的維度尺寸要求完全一致.

>>> a1=numpy.random.randn(2,2)
>>> a2=numpy.random.randn(3,2)
>>> a=numpy.vstack((a1,a2))
>>> a
array([[ 0.67667278, -0.3318424 ],[-0.2550355 , -0.74132559],[ 0.43534239,  1.46399303],[-0.86049107,  2.03871322],[-0.01824614,  0.46310639]])>>> b1=numpy.random.randn(2,3)
>>> b2=numpy.random.randn(2,1)
>>> b=numpy.hstack((b1,b2))
>>> b
array([[-0.69216195,  0.43455353, -0.5628851 ,  1.98854944],[ 1.73648473,  1.11249471, -0.8067703 , -0.53433626]])
>>> import numpy
>>> a1=numpy.random.randn(2,2,2)
>>> a2=numpy.random.randn(2,2,2)
>>> a=numpy.vstack((a1,a2))
>>> a[0]
array([[ 0.06585097, -0.80433501],[ 1.77412345, -0.5875084 ]])
>>> b=numpy.hstack((a1,a2))
>>> b.shape
(2, 4, 2)
>>> a.shape
(4, 2, 2)

參考博文:https://blog.csdn.net/nanhuaibeian/article/details/100597342

6.2 np.stack()

stack() 函數是vstack(),與hstack()結合升級.

Parameters: 
arrays : sequence of array_like
Each array must have the same shape.
axis : int, optional
The axis in the result array along which the input arrays are stacked.
out : ndarray, optional
If provided, the destination to place the result. The shape must be correct, matching that of what stack would have returned if no out argument were specified.
Returns:    
stacked : ndarray
The stacked array has one more dimension than the input arrays.

np.stack(tuple, axis=0) 等價于 np.vstack(tuple)
np.stack(tuple, axis=1) 等價于 np.hstack(tuple)

參考博文:https://blog.csdn.net/u013019431/article/details/79768219

7.list與數組相互轉換

list–>np.array

a=[1,2,3]
b=np.array(a)

np.array->list

c=b.tolist()

7.1 list() vs tolist()

  1. 直接用list()函數 # 轉換成 第0維的每一個元素(Numpy.array) 組成的list
  2. 用array.tolist()函數 # 與原來的array的數據形式是一樣的,只不過每一維度都是一個list

結論–tolist() 方法轉換的更徹底,list()方法只轉換了源數據的第一個維度。
如果np.array是一維,兩者沒有區別。但如果是二維結果是不同的。

>>> import numpy >>> a1=numpy.random.rand(3)
>>>>> a1
array([0.26546725, 0.27424911, 0.18618962])
>>> list(a1)
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705]
>>> a1.tolist()
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705]>>> a2
array([[0.25176667, 0.78656379, 0.17814966],[0.38749959, 0.195838  , 0.91929009]])
>>> list(a2)
[array([0.25176667, 0.78656379, 0.17814966]), array([0.38749959, 0.195838  , 0.91929009])]
>>> a2.tolist()
[[0.25176666870818276, 0.7865637882478266, 0.17814966253473885], [0.3874995863899837, 0.19583799515418743, 0.9192900894591074]]>>> 

參考博文:https://www.cnblogs.com/wxiaoli/p/9550382.html

8.np.random

于隨機/隨機數相關的一個模塊。

8.1 randn()和rand()

rand()-從標準正態分布中隨機抽樣
randn()-從標準正態分布中隨機抽樣,值處于[0,1]之間

>import numpy
>a=numpy.random.randn(2)
>a
array([2.14862612, 2.64967285])
>b=numpy.random.randn(2,4)
>b
array([[ 1.12026781, -0.35804222,  0.40199839,  0.8530957 ],[ 0.17434359,  0.77714432, -1.050777  , -1.4872941 ]])
>c=numpy.random.randn(2,4,3)
>c
array([[[-0.63199863,  0.3026388 ,  1.52031827],[-0.02198394,  1.21513216, -0.0347614 ],[ 0.05571264,  0.38651474, -1.24363781],[-1.93182679,  1.1883758 , -1.90170175]],[[-0.65822958,  0.52109845, -0.49748048],[ 0.66535972, -0.118965  ,  1.55862421],[ 0.58604542,  0.44303396, -1.27043267],[-0.26475081,  0.91481557, -0.7255539 ]]])
>a1=numpy.random.rand(2)
>a1
array([0.29220946, 0.56908742])

8.2np.random.choice()

從xxx中隨機抽取元素

numpy.random.choice(a, size=None, replace=True, p=None)

a : 一維數組或整數
size : 生成樣本的大小
replace : bool類型 False表示樣本中不允許有重復值 True…
p : 給定數組中元素出現的概率

np.random.choice(5,3,p=[0,0,0,0,1])       
array([4, 4, 4], dtype=int64)    

參考文檔:https://www.cnblogs.com/cavaliers20160620/p/8964784.html

8.3 np.random.uniform()

從[1,2]的均勻分布中隨機采樣64個數據,并且將尺寸由 (64,)轉換成(64,1)

np.random.uniform(1, 2, size=64)[:, np.newaxis]

9.常用方法

x.astype(int)

改變數組中的數據類型

x=np.array([1,2,2.5])
x.astype(int)

np.squeeze()

去除中維度為1 的維

In [20]: d=np.array([[[1],[1]],[[1],[1]]])
In [22]: d.shape
Out[22]: (2, 2, 1)

In [23]: e=np.squeeze(d)
In [25]: e.shape
Out[25]: (2, 2)

np.std()

計算所有元素的標準差

numpy.std(data)

計算每一列的標準差

numpy.std(data, 0)

計算每一行的標準差

numpy.std(data, 1)

np.prob()

返回給定維度上各個元素的乘積

>>> import numpy as np
>>> a=np.array([[2,3],[4,5]])
>>> a
array([[2, 3],[4, 5]])>>> np.prod(a)
120
>>> np.prod(a,axis=0)
array([ 8, 15])>>> np.prod(a,axis=1)
array([ 6, 20])

array.copy()

直接名字賦值,兩個變量指向同一塊地址,其中任何一個數據操作都會影響另一個數組。用數組的.copy()方法,則會建立一個與原來完全獨立但是數字完全相同的一個數組。

import numpy as np
ar1 = np.arange(10)
print(ar1)ar2 = ar1
print(ar2 is ar1)ar1[2] = 9
print(ar1,ar2)
#ar1和ar2 指向同一個值,所以ar1改變,ar2一起改變print('-------------------------------')ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
#coyp方法生成數組及其數據的完整拷貝j

輸出結果:

    [0 1 2 3 4 5 6 7 8 9]True[0 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]-------------------------------False[9 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]

參考博文:https://blog.csdn.net/weixin_30935137/article/details/80822005

np.linspace()

輸出(-1,1)之間的等間距15個數

np.linspace(-1, 1, 15)

np.vstack()

寫在一行的for循環,每次將15個數作為一行堆疊64次,生成一個64*15的矩陣

np.vstack([np.linspace(-1, 1, 15) for _ in range(64)])

np.c_ ()

np.c_ 用于連接兩個矩陣
np.c 中的c 是 column(列)的縮寫,就是按列疊加兩個矩陣,就是把兩個矩陣左右組合,要求行數相等。
參考博文:https://blog.csdn.net/qq_33728095/article/details/102512600

arr.ravel()

將多維數組轉換成一維數組

>>> a = numpy.array([[1,2],[3,4]])
>>> a.ravel()
array([1, 2, 3, 4])
>>>

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

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

相關文章

機器學習問題總結(01)

文章目錄1.請描述推薦系統中協同過濾算法CF的原理2.請描述決策樹的原理、過程、終止條件,以及如何防止過擬合2.1決策樹生成算法2.2 剪枝處理(防止過擬合)2.3 停止條件2.4 棵決策樹的生成過程2.5 決策樹的損失函數3.請描述K-means的原理&#…

pthread_attr_init線程屬性

1.線程屬性 線程具有屬性,用pthread_attr_t表示,在對該結構進行處理之前必須進行初始化,在使用后需要對其去除初始化。我們用pthread_attr_init函數對其初始化,用pthread_attr_destroy對其去除初始化。 1. …

Python實例講解 -- 解析xml

Xml代碼 <?xml version"1.0" encoding"utf-8"?> <info> <intro>信息</intro> <list id001> <head>auto_userone</head> <name>Jordy</name> <number&g…

springboot3——Email

maven導入包&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.1.6.RELEASE</version></dependency> 參數配置&#xff1a; # MailPrope…

python(22)--面向對象1-封裝

python面向對象1面向過程/面向對象2面向對象核心概念-類3類的設計3.1類三要素-類名、屬性、方法3.2面向對象基礎語法3.2.1查看對象的常用方法3.2.2類定義3.2.3創建類對象3.2.4__init__()方法3.2.5 self參數3.2.6類內置方法和屬性_del_()方法--銷毀對象_str_()方法--定制化輸出對…

機器學習問題總結(02)

文章目錄1.stacking模型以及做模型融合的知識1.1 從提交結果中融合1.2 stacking1.3 blending2. 怎樣去優化SVM算法模型的&#xff1f;2.1 SMO優化算法2.2 libsvm 和 Liblinear3.現有底層是tensorflow的keras框架&#xff0c;如果現在有一個tensorflow訓練好的模型&#xff0c;k…

python對操作系統的目錄和文件操作

一、獲取當前目錄下的特定文件列表>>>import glob,os>>>curdir os.getcwd() #獲取當前目錄>>>os.chdir(workdir) #設置當前目錄>>>dir glob.glob(*.dat) #獲取當前目錄的dat文件列表>>>os.chdir(curdir) #…

常見漏洞

Cookie without HttpOnly flag set 如果在Cookie上設置了HttpOnly屬性&#xff0c;則客戶端JavaScript無法讀取或設置Cookie的值。 這種措施通過阻止某些客戶端攻擊&#xff08;例如跨站點腳本&#xff09;&#xff0c;通過阻止它們通過注入的腳本來簡單地捕獲cookie的值&…

python函數星號參數

2011-09-01 17:35 2人閱讀 評論(0) 收藏 編輯 刪除 今天有個工作是導出一個函數給腳本用 我自已先要測一下 先要客戶端發送一個消息給服務器 看了下C部分的代碼,如下 "def onNetMessage(self,playerID, msgName,msgParam):\n" //客戶端調用服務器腳本 " …

MachineLearning(3)-流型

流型-manifold在很多機器學習的文章中會見到“嵌入在高維空間的低維流型”這樣的字眼&#xff0c;下記錄一些重要概念。參考資料&#xff1a;https://blog.csdn.net/sinat_32043495/article/details/789977581.流型 局部具有歐幾里得空間性質的空間&#xff08;流型就是一個空間…

C/C++常見面試題(四)

C/C面試題集合四 目錄 1、什么是C中的類&#xff1f;如何定義和實例化一個類&#xff1f; 2、請解釋C中的繼承和多態性。 3、什么是虛函數&#xff1f;為什么在基類中使用虛函數&#xff1f; 4、解釋封裝、繼承和多態的概念&#xff0c;并提供相應的代碼示例 5、如何處理內…

機器學習問題總結(03)

文章目錄1.struct和class區別&#xff0c;你更傾向用哪個2.kNN&#xff0c;樸素貝葉斯&#xff0c;SVM的優缺點&#xff0c;各種算法優缺點2.1 KNN算法2.2 樸素貝葉斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10億個整數&#xff0c;1G內存&#xff0c;O(n)算法&#xff0c;統計只出…

python源代碼現成重用大全

Nullege is a search engine for Python source code. http://nullege.com/

redis——新版復制

sync雖然解決了數據同步問題&#xff0c;但是在數據量比較大情況下&#xff0c;從庫斷線從來依然采用全量復制機制&#xff0c;無論是從數據恢復、寬帶占用來說&#xff0c;sync所帶來的問題還是很多的。于是redis從2.8開始&#xff0c;引入新的命令psync。 psync有兩種模式&a…

Python(23)-面向對象2-繼承,多態

面向對象基本概念2--繼承、多態1.繼承基本概念2.子類重寫父類方法2.1完全重寫2.2擴展父類方法--super()3.多繼承4.新式類和舊式類5.多態基本概念6.類屬性、類方法-classmethod6.1類屬性6.2類方法classmethod7.靜態方法staticmethod8.案例分析本系列博文來自學習《Python基礎視頻…

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分類基于 Linux 的集群Linux 服務器集群系統Linux 高性能計算集群集群系統 MOSIX構建 Linux 集群IBM 與 Linux 集群 本專題收集了 Linux 集群相關的文章和教程。 什么是集群? 簡單的說&#xff0c;集群&#xff08;cluster&#x…

機器學習問題總結(04)

文章目錄1、MLP的BP過程2、maxpool層BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍歷像素的方式&#xff0c;講兩種&#xff1f;4、傳統圖像處理有了解過嗎&#xff0c;比如去噪 特征提取5、問在linux下寫過代碼嗎&#xff1f; 問用了什么軟件工具6、LDA&#xff…

持續更新的Zookeeper知識總結

簡介 Zookeeper為分布式應用 提供了高效且可靠的分布式協調服務&#xff0c;提供了諸如統一命名服務、發布訂閱、負載均衡、配置管理和分布式鎖等分布式的基礎服務。 設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來&#xff0c;構成一個高效可靠的原語集&#xf…

Python(24)-面向對象3-可迭代類對象Pokemon

面向對象3-Pokemon demo1.可迭代類對象1.可迭代類對象 想要實現類對象中某些屬性/數值的迭代訪問&#xff0c;需要在類中定義一個__iter__()方法&#xff0c;和__next__() 的方法(python 2 中為next()方法)。 _iter_()返回值是self&#xff0c; _next_()中遍歷完所有的元素后發…

機器學習問題總結(05)

文章目錄1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce執行流程2、機器學習場景3、推薦系統&#xff08;預測電影等級&#xff09;4、CTR&#xff08;點擊通過率 -> 廣告&#xff09;5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…