numpy簡單入門

2022-06-23 11:03:12 字數 3927 閱讀 6235

numpy數以陣列為物件,將各種資料轉化成陣列,因此,我們學習的也就是陣列了,實際上它被稱之為ndarrays。

建立乙個陣列:

import

numpy as np

my_array = np.array([1, 2, 3, 4, 5])

print

(my_array)

print(my_array.shape)

建立全部為0 的陣列:

import

numpy as np

my_zeros_array = np.zeros(5)

print(my_zeros_array)

建立陣列:

import

numpy as np

#用列表生成陣列

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

#用元組生成陣列

b = np.array((0, 1, 2, 3, 4, 5))

#產生0到4的整數陣列,包頭不包尾

c = np.arange(5)

#從0到100,以10作為差值求等差數列

e = np.arange(0, 100, 10)

#產生0到2*np.pi的等差數列,並且一共五個,可以得出差值為2*np.pi/(5-1) = 1.5707963267948966

d = np.linspace(0, 2*np.pi, 5) print(a) print(b) print(c) print(d)

多維陣列:

import

numpy as np

#md array,

a = np.array([[11, 12, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28 ,29, 30],

[31, 32, 33, 34, 35]])

#以0作為陣列的下標

print

(a[0, 0])

#可以使用負數倒數去取值

print(a[-1, -1])

#陣列切片是包頭不包尾

print(a[2, 1:4])

#對比一下這個跟原生的python規則一致

d = [1, 2, 3, 4, 5]

print(d[1:4])

陣列的屬性:

import

numpy as np

#array properties,

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 35]])

#print

(type(a))

#object 這個不準確,有時候是int32 有時候是int64 還有的是其他float,string等這個是根據這個陣列的值決定

print(a.dtype) #

int32

#1、如果裡面的額數值都是int並且值不大於-2^31 ~ 2^31-1次方=4294967295,由於則顯示為int32

#來感受一下吧

#int32

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 2147483647]])

print

(a.dtype)

#int64

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 2147483648]])

print

(a.dtype)

#那麼,64的極限在**?你可能想到了,就是-2^63 ~ 2^63-1

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 2**63-1]])

print

(a.dtype)

#比int還要大一點呢?那就是float64了

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 2**63]])

print

(a.dtype)

#比float大一點點呢?那就是object了

a = np.array([[11, 23, 13, 14, 15],

[16, 17, 18, 19, 20],

[21, 22, 23, 24, 25],

[26, 27, 28, 29, 30],

[31, 32, 33, 34, 2**64]])

print(a.dtype)

在這裡我要強行解釋一波,**不對的地方請各位道友多多指出

1、為什麼int32是用2^32次方的算數呢?因為計算機中都是由0或1組成的資料,也就是兩種情況(2就被推出來送命啦),而32是表示32位的意思,那「位」又是什麼?位是計算機的最小儲存單元(也就是存放0或1 的那個單元,你可以理解成牢房),8位為乙個位元組,因此int32又稱4個位元組。位元組是計算機中的最小單位。

那為什麼是-2^31~2^31-1這個範圍呢?而不是0~2^32-1這個範圍呢?你的理解非常正確,無符號整型就是這個範圍,那就好理解了,因為有正負號,所以就是-2^31~2^31-1。

還有,為什麼是-2^31~2^31-1而不是-2^31~2^31呢?都說對半分嘛,怎麼正數反而要減去乙個1呢?沒錯,你的懷疑不無道理,可以這樣就有乙個棘手的問題,1可以表示位00000000 00000000 0000000 00000001 ,而-1可以表示為 10000000 00000000 00000000 00000001,那麼0呢?當然,0有兩種情況-0和0,你可能很疑惑,怎麼有-0呢?沒辦法還真的有。因此-0和0占去一位都是0,所以就需要負數或者正數減去乙個1。int64也一樣。

2、我也有個疑問,為什麼float取值範圍要比int64還要大?因為他們都是64位儲存對吧?而且float型別還要用一位來記錄小數點,沒錯吧!

我也是想當然,不過如果我們學過c或者更加底層的彙編,你就會發現,浮點的儲存跟整型不一樣,他是可能損失精度的,比如1000000 整型就傻傻的將所有1000000轉化為二進位制存放,而浮點型別不一樣,會轉化成1.e7,也就是將一部分保留,另一部分以冪次方表示,從而擴大其取值範圍。

3、沒想好,就先這樣吧~!

where() 函式是另外乙個根據條件返回陣列中的值的有效方法。只需要把條件傳遞給它,它就會返回乙個使得條件為真的元素的列表。

import

numpy as np

a = np.arange(0, 100, 1)

print

(a)b = a[:5]

c = a[a >= 50]

print(b) #

>>>[ 0 10 20 30 40]

print(c) #

>>>[50 60 70 80 90]

NumPy快速入門

python 2.7 ipython 4.1.2 in 1 from numpy import in 2 yuanzu 4,5,6 in 3 ll array yuanzu in 4 ll out 4 array 4,5,6 in 5 pylist 0,1,2 in 6 jj array pylis...

numpy簡單使用

建立一維陣列 in 1 import numpy as np in 2 np.array 1,2,3 out 2 array 1,2,3 in 3 np.linspace 2.0,3.0,num 5 out 3 array 2.2.25,2.5 2.75,3.建立二維陣列 in 3 data 2,4...

Numpy簡單小結

numpy是python中科學計算的基礎包。它是乙個python庫,提供多維陣列物件,各種派生物件 如掩碼陣列和矩陣 以及用於陣列快速操作的各種api,有包括數學 邏輯 形狀操作 排序 選擇 輸入輸出 離散傅利葉變換 基本線性代數,基本統計運算和隨機模擬等等。numpy的一些操作 np.array ...