1. 程式人生 > 其它 >python中numpy的基本使用和random的一些函式

python中numpy的基本使用和random的一些函式

技術標籤:numpypython

文章目錄

基本使用

import numpy as np
#用array構造一維陣列
arr1 = np.array([1,2,3,4])
print(arr1)
#用array構造二維陣列
arr2=np.array([[2,3,4],[5,6,7]])
print(arr2)
arr2

[1 2 3 4]
[[2 3 4]
[5 6 7]]
array([[2, 3, 4],
[5, 6, 7]])

#用arange構造陣列,構造的陣列從0開始,個數為括號中的數
arr3=np.arange(5)
print(arr3)
arr4=np.array([np.arange(3),np.arange(3)])
print(arr4)

[0 1 2 3 4]
[[0 1 2]
[0 1 2]]

#reshape改變陣列的維度
arr5 = np.arange(24).reshape(2,3,4)
arr5

array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])

np.bool(1)

True

#陣列維度的數量
arr2.ndim

2

#陣列的形狀
arr5.shape

(2, 3, 4)

#陣列中元素的數量,也就是shape的結果相乘
arr5.size

24

#陣列中每個元素所佔位元組的大小
arr6=np.array([1.5,2.3,6.5])
arr6.itemsize

8

#陣列中元素一共佔的位元組大小=itemsize*size
arr6.nbytes

24

#陣列轉置,本體arr4沒變
arr7=arr4.T
print(arr7)
print(arr7.transpose())

[[0 0]
[1 1]
[2 2]]
[[0 1 2]
[0 1 2]]

#一維陣列的切片
a=np.arange(7)
#從第一個開始取,取4-1=3個
print(a[1:4])
#取第一個,然後隔兩個取一個
a[3:7:2]

[1 2 3]
array([3, 5])

#二維陣列的切片
b=np.arange(12).reshape(4,3)
print(b)
print(b[0:3,0:2])#前面取列,後面取行

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

import numpy as np
arr8=np.array([0,0,1,1,2,2]).reshape(3,2)
print(arr8)
#把多維陣列改變為一維陣列
print(arr8.flatten())#複製一份新的,修改不會影響本體
arr8.flatten()[1]=100
print(arr8)
print(arr8.ravel())#返回檢視,修改會影響本體
arr8.ravel()[4]=100
print(arr8)

[[0 0]
[1 1]
[2 2]]
[0 0 1 1 2 2]
[[0 0]
[1 1]
[2 2]]
[0 0 1 1 2 2]
[[ 0 0]
[ 1 1]
[100 2]]

#陣列轉成列表
arr8.tolist()

[[0, 0], [1, 1], [100, 2]]

#陣列轉成任意格式
print(arr8.astype(float))            #浮點型

[[ 0. 0.]
[ 1. 1.]
[100. 2.]]

#numpy常用統計函式
b=np.array([[ 0, 1, 20, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]])
#求最大值
print(np.max(b))
#求沿axis=1軸方向統計最大值,每一行進行比較
print(np.max(b,axis=1))
#求最小值
print(np.min(b))
#求沿axis=0軸方向統計最小值,每一列進行比較
print(np.min(b,axis=0))

20
[20 11]
0
[0 1 8 3 4 5]

#返回陣列中最大值減去最小值
print(np.ptp(b))
#沿axis=0,即每列最大值減去最小值
print(np.ptp(b,axis=0))
#沿axis=1,即每行最大值減去最小值
print(np.ptp(b,axis=1))

20
[ 6 6 12 6 6 6]
[20 5]

b.resize(4,3)
print(b)

[[ 0 1 20]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]

#沿列方向依次累加
print(np.cumsum(b,axis=0))
#沿行方向依次累加
print(np.cumsum(b,axis=1))

[[ 0 1 20]
[ 3 5 25]
[ 9 12 33]
[18 22 44]]
[[ 0 1 21]
[ 3 7 12]
[ 6 13 21]
[ 9 19 30]]

#沿列方向依次累乘
print(np.cumprod(b,axis=0))
#沿行方向依次累乘
print(np.cumprod(b,axis=1))

[[ 0 1 20]
[ 0 4 100]
[ 0 28 800]
[ 0 280 8800]]
[[ 0 0 0]
[ 3 12 60]
[ 6 42 336]
[ 9 90 990]]

#陣列的廣播,就是陣列與標量做運算時,標量改變成陣列的格式
print(b)
d=b+2
print(b)

[[ 0 1 20]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[ 0 1 20]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]

numpy中random的一些函式

(函式非常少)

import numpy as np
#numpy.random.eand(d0,d1,……,dn)
#rand函式根據給定的維度生成[0,1)之間的資料
#dn表示表格的第n個維度
print(np.random.rand(4,2))#4行2列
print(np.random.rand(4,3,2))#4塊3行2列

[[0.49389979 0.81490345]
[0.09817178 0.803256 ]
[0.36264398 0.79849486]
[0.07936067 0.66654057]]
[[[0.22787189 0.339923 ]
[0.67507703 0.75938864]
[0.47181075 0.45562696]]

[[0.9583842 0.64579948]
[0.36533534 0.40048645]
[0.33431584 0.46221737]]

[[0.28649841 0.27141595]
[0.33426126 0.00927193]
[0.23149327 0.22421478]]

[[0.71224952 0.56724126]
[0.78355078 0.8932719 ]
[0.23967193 0.30825069]]]

#numpy.random.randint(low,high=None,size=None,dtype="l")
#返回[low,high)之間的隨機整數,size是陣列維度,dtype是資料型別,預設為整形
#high沒有填寫時,預設生成的隨機數的範圍是[0,low]
print(np.random.randint(1,size=5))#返回[0,1)之間的整數,所以只有0
print(np.random.randint(1,5))
print(np.random.randint(-5,5,size=(2,2)))

[0 0 0 0 0]
1
[[ 1 -5]
[ 0 3]]

#numpy.random.choice(a,size=None,replace=True,p=None)
#從給定的一維陣列或者整數中隨機生成
#a為一維陣列類似資料或整數,size為陣列維度,p為陣列中資料出現的頻率
print(np.random.choice(5,3))
#當replace為False時,生成的隨機數不會重複
print(np.random.choice(5,3,replace=False))
ls=['zhangsan','lisi','wangwu','zhaoliu','xiaoming']
print(np.random.choice(ls,size=(3,2)))
#p要滿足兩點,一是概率相加為1,二是長度和a一致
print(np.random.choice(ls,size=(3,2),p=[0.4,0.2,0.2,0.1,0.1]))

[1 3 4]
[0 4 1]
[[‘wangwu’ ‘wangwu’]
[‘xiaoming’ ‘lisi’]
[‘zhangsan’ ‘lisi’]]
[[‘xiaoming’ ‘lisi’]
[‘zhangsan’ ‘zhangsan’]
[‘wangwu’ ‘lisi’]]