Phython-Numpy語法總結-數組的創建

NumPy 是什麼?

NumPy是使用Python進行科學計算的基礎軟件包。除其他外,它包括:

功能強大的N維數組對象。
精密廣播功能函數。
集成 C/C+和Fortran 代碼的工具。
強大的線性代數、傅立葉變換和隨機數功能。

#全部行都能輸出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

利器之一:Ndarray

NumPy 最重要的一個特點是其 N 維數組對象 ndarray,它是一系列同類型數據的集合,以 0 下標爲開始進行集合中元素的索引。ndarray 對象是用於存放同類型元素的多維數組。ndarray 中的每個元素在內存中都有相同存儲大小的區域。

數組(ndarray)的創建

import numpy as np

一維數組的創建

np.array

#生成數組的時候還可以指定數組基本元素類型。
a=np.array([1,2,3,4])

np.arange函數

np.arange(10)
np.arange(0,10,0.2)

np.linspace

help(np.linspace)
np.linspace(0,3,3)
#這個函數裏面有一個參數endpoint,是一個布爾值,
#可以通過對這個參數的設定,來選擇是否包含最後一個數值。
np.linspace(1,8,5,endpoint=False)
array([1. , 2.4, 3.8, 5.2, 6.6])

二維數組的創建

import numpy as np
b=np.array([[1,2,3],[4,5,6]])
c=np.array([[1,"2",3],[4,"5",6]])
d=np.array([[1,"2",3],["4",5,6]])
e=np.array([[1,"2",3],["4",5,6]],dtype="object")
print("b=",b)
print("c=",c)
print("d=",d)
print("e=",e)
b= [[1 2 3]
 [4 5 6]]
c= [['1' '2' '3']
 ['4' '5' '6']]
d= [['1' '2' '3']
 ['4' '5' '6']]
e= [[1 '2' 3]
 ['4' 5 6]]

創建數組時候的注意事項:

a.輸入的數組要工整,否則會出現後續一系列處理問題。 a=np.array([1,2,3,[4,5]]) b=np.array([[1,2,3],[4,5]]) 不要創建這樣的數組,雖然創建的過程不會提示出錯。如果創建的對象不工整,建議選擇創建列表對象。
b.輸入數組裏面的元素最好是同一類型,如果不是同一類型,最好指dtype=“object”,否則如果既不是同一類型,又沒有指定數組類型爲object,那麼生成數組之後可能被強制轉化爲字符串。比如下面的例子。

a=np.array([1,2,3.0])
a.dtype
dtype('float64')
b=np.array([1,2,3,"11"])
b #元素會轉化爲字符串類型
b.dtype
dtype('<U11')
c=np.array([[1,2,3],["a","b","c"]])
c #元素會轉化爲字符串類型
array([['1', '2', '3'],
       ['a', 'b', 'c']], dtype='<U11')
#運行下面這句會有錯誤提示。
d=np.array([1,2,3,"a"],dtype="float")
#下面這一句運行正確,無錯誤提示。
d=np.array([1,2,3,"a"],dtype="object")
d
array([1, 2, 3, 'a'], dtype=object)
ValueError                                Traceback (most recent call last)
<ipython-input-225-7d6178ef8f85> in <module>
      1 #運行下面這句會有錯誤提示。
----> 2 d=np.array([1,2,3,"a"],dtype="float")

ValueError: could not convert string to float: 'a'
#如何查看numpy定義了哪些dtype?
np.typeDict
{'?': numpy.bool_,
 0: numpy.bool_,
 'byte': numpy.int8,
 'b': numpy.int8,
 1: numpy.int8,
 'ubyte': numpy.uint8,
 'B': numpy.uint8,

…… ……

數組的屬性

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

ndim屬性

#ndim屬性
a.ndim #返回2
2
b.ndim #返回1
1

shape屬性

a.shape #返回(2,3)
b.shape #返回(3,),這是一個只包含一個元素的元組。
(2, 3)
(3,)

size屬性

a.size
6

dtype屬性

a.dtype
dtype('int32')

itemsize屬性
itemsize : int | The memory use of each array element in bytes.

a=np.array([1,2,3])
a.itemsize
4
b=np.array(["劉","1","2"])
b.itemsize
4
#如果想查看數組實例的其他屬性可以運行下面的代碼
help(a)

缺失值問題

python中的缺失值有np.nan,None等,後面的章節會詳細說明。

#np.nan是一個float類型的值
type(np.nan)
float
#定義一個含有缺失值的一維數組,數組類型爲float。
a=np.array([1,2,np.nan])
a.dtype
dtype('float64')
#定義一個含有缺失值的字符串數組。
#下面的命令可能並不是你想要的,這會把缺失值轉換成"nan"
a=np.array(["1","2",np.nan])
a
array(['1', '2', 'nan'], dtype='<U3')
#下面講兩個正確的定義方法
#方法1
#a的類型爲object
a=np.array(["1","2",None])
print(a[2])
None
#方法2
a=np.array(["1","2",np.nan],dtype="object")
a
array(['1', '2', nan], dtype=object)

np.isnan函數

a=np.array([1,2,3,np.nan])
np.isnan(a)
array([False, False, False,  True])
#np.isnan("a")
#np.isnan(None)
#運行上面兩句會有錯誤提示,因爲這個函數的參數不能是字符串,或者是字符串組成的數組。
np.isnan(1) #裏面的參數可以是一個數值,或者數值組成的數組。返回False
False

一些特殊數組的快速創建

元素全部爲0的數組

np.zeros((2,3)) #參數是數組的形狀
array([[0., 0., 0.],
       [0., 0., 0.]])

元素全部爲1的數組

np.ones((3,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

用指定的元素將數組填滿

np.full((2,3),"a")
array([['a', 'a', 'a'],
       ['a', 'a', 'a']], dtype='<U1')
np.full((2,3),[1,2,3])
array([[1, 2, 3],
       [1, 2, 3]])
np.full((2,3),[1,2]) #注意運行這句會有錯誤提示,因爲不能將指定的內容(第二個參數),廣播到我們指定形狀的數組(2*3)

生成單位矩陣

np.eye() #生成一個單位矩陣,因爲單位矩陣是一個方陣, 所以只指定一個行數或者列數就可以,不用指定多個數。

np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

生成一個未初始化的(任意的)指定形狀的數組

#生成一個未初始化的(任意的)指定形狀的數組
np.empty((3,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

生成一個對角線矩陣

#生成一個對角線矩陣
np.diag([1,2,3,4])
array([[1, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 3, 0],
       [0, 0, 0, 4]])

np.random模塊:隨機數組的生成

np.random模塊下的部分函數說明

函數描述
seed 向隨機數生成器傳遞隨機種子
rand 從均勻分佈中抽取樣本 ,取值範圍爲0到1
uniform 從均勻分佈中抽取樣本
randint 根據給定的範圍抽取隨機整數
randn 從均值爲0方差爲1的正態分佈中抽取樣本
normal 從正態分佈中抽取樣本
| choice |從一個一維數組中隨機抽取一個樣本

np.random.randint(10,20,(3,4))
array([[17, 17, 10, 12],
       [19, 19, 13, 12],
       [15, 18, 11, 10]])
np.random.choice(np.array(["張三","李四","王五"]),5)
#可以設定樣本量和各個值被抽中的概率
array(['王五', '王五', '李四', '李四', '張三'], dtype='<U2')
#打亂數組元素順序
a=np.array([1,2,3,4])
np.random.shuffle(a) #不會返回對象,會直接作用於數組a
a
array([4, 2, 1, 3])

累積求和

# 累積求和
import numpy as np
a=np.random.randint(1,10,5)
print("a=",a)
print("a.cumsum=",a.cumsum())
a= [4 6 1 4 7]
a.cumsum= [ 4 10 11 15 22]
b=np.random.randint(1,10,(5,2))
print("b=",b)
print("b.cumsum(axis=0)=",b.cumsum(axis=0))
b= [[1 5]
 [5 6]
 [8 7]
 [7 3]
 [5 3]]
b.cumsum(axis=0)= [[ 1  5]
 [ 6 11]
 [14 18]
 [21 21]
 [26 24]]
print("b.cumsum(axis=1)=",b.cumsum(axis=1))
b.cumsum(axis=1)= [[ 1  6]
 [ 5 11]
 [ 8 15]
 [ 7 10]
 [ 5  8]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章