1. 程式人生 > 其它 >import numpy as np什麼意思_Numpy回顧-1

import numpy as np什麼意思_Numpy回顧-1

技術標籤:import numpy as np什麼意思

NumPy(Numerical Python) 是 Python 語言的一個擴充套件程式庫,支援大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫
本系列文章針對Numy進行一個比較系統的回顧
一般在python中我們會對Numpy進行縮寫
import numpy as np
因此後續中的np均指numpy

1.常量

名稱型別
np.nan空值
np.inf無窮大
np.pi圓周率
np.e自然對數
import numpy as np
np.e

2.718281828459045

2.資料型別

Python 原生的資料型別相對較少, bool、int、float、str等。這在不需要關心資料在計算機中表示的所有方式的應用中是方便的。然而,對於科學計算,通常需要更多的控制。為了加以區分 numpy 在這些型別名稱末尾都加了“_”
型別大小說明
bool_ / bool88布林
int8/byte8整數
int16/short16整數
int32/intc32整數
int_/int64/long/intp64整數
uint8/ubyte8無符號整數
uint16/ushort16無符號整數
uint32/uintc32無符號整數
uint64/uintp/uint0/uint64無符號整數
float16/half16浮點型
float32/single32浮點型
float_/float64/double64浮點型
str/unicode/str0/unicode-字串
datetime64-日期時間型別
timedelta64-表示兩個時間之間的間隔

如何檢視資料的型別呢?

import numpy as np
a = np.dtype('float64')
print(a.type)

<class 'numpy.float64'>

如何檢視資料的資訊呢?

import numpy as np

ii16 = np.iinfo(np.int16)
print(ii16.min)  # -32768
print(ii16.max)  # 32767

-32768
32767

表示int16最大值為32767 最小值為-32768

至於原因的話 和二進位制有關係 int16表示有16個格子

8d8f838a1abb3f1b4ec9e42046071e53.png

那麼只有15個格子是用來進行二進位制填充 2**15=32768 所以最大值即為32767

為什麼最大值比二進位制值少一位?

涉及到計算機補碼的問題 可以參考一下這個部落格

https://blog.csdn.net/linux12121/article/details/51236654?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param​blog.csdn.net

3.時間日期和時間增量

numpy 中,我們很方便的將字串轉換成時間日期型別 datetime64datetime 已被 python 包含的日期時間庫所佔用)。

datatime64是帶單位的日期時間型別,其單位如下:

日期單位含義時間單位含義
Yh小時
Mm分鐘
Ws
Dms毫秒
us微秒
ns納秒
ps皮秒
fs飛秒
as阿託秒
a = np.datetime64('2020-03-01')
print(a, a.dtype)  # 2020-03-01 datetime64[D]

2020-03-01 datetime64[D]

4.陣列

numpy 提供的最重要的資料結構是ndarray,它是 python 中list的擴充套件。

比如一維陣列

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

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

比如二維陣列

c = 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]])
print(c, type(c))

# [[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]] <class 'numpy.ndarray'>

array()asarray()都可以將結構資料轉化為 ndarray,但是array()asarray()主要區別就是當資料來源是ndarray時,array()仍然會 copy 出一個副本,佔用新的記憶體,但不改變 dtype 時asarray()不會。

x = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
y = np.array(x)
z = np.asarray(x)
x[1][2] = 2
print(x,type(x))
print(y,type(y))
print(z,type(z))

# [[1, 1, 1], [1, 1, 2], [1, 1, 1]] <class 'list'>

# [[1 1 1]# [1 1 1]# [1 1 1]] <class 'numpy.ndarray'>

# [[1 1 1]# [1 1 1]# [1 1 1]] <class 'numpy.ndarray'>

陣列中有2個比較特殊的陣列,分別為0 陣列和1陣列

  • zeros()函式:返回給定形狀和型別的零陣列。
  • zeros_like()函式:返回與給定陣列形狀和型別相同的零陣列。
  • ones()函式:返回給定形狀和型別的1陣列。
  • ones_like()函式:返回與給定陣列形狀和型別相同的1陣列。
x = np.zeros(5)
print(x)  #

[0. 0. 0. 0. 0.]

x = np.zeros([2,3])
print(x)

[[0. 0. 0.]

[0. 0. 0.]]

x = np.ones(5)
print(x)

[1. 1. 1. 1. 1.]

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.ones_like(x)
#ones_like()函式:返回與給定陣列形狀和型別相同的1陣列。

[[1 1 1]
[1 1 1]]

隨機陣列

  • empty()函式:返回一個空陣列,陣列元素為隨機數。
  • empty_like函式:返回與給定陣列具有相同形狀和型別的新陣列。
x = np.empty(5)
print(x)

[1.95821574e-306 1.60219035e-306 1.37961506e-306
9.34609790e-307 1.24610383e-306]

單位陣列

  • eye()函式:返回一個對角線上為1,其它地方為零的單位陣列。
  • identity()函式:返回一個方的單位陣列。
x = np.eye(4)
print(x)

[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]

對角陣列

diag()函式:提取對角線或構造對角陣列。

v = [1, 3, 5, 7]
x = np.diag(v)
print(x)

[[1 0 0 0]
[0 3 0 0]
[0 0 5 0]
[0 0 0 7]]

常數值

  • full()函式:返回一個常數陣列。
  • full_like()函式:返回與給定陣列具有相同形狀和型別的常數陣列。
x = np.full((2, 7), 7)
print(x)

[[7 7 7 7 7 7 7]
[7 7 7 7 7 7 7]]

利用數值範圍來建立ndarray

  • arange()函式:返回給定間隔內的均勻間隔的值。
  • linspace()函式:返回指定間隔內的等間隔數字。
  • logspace()函式:返回數以對數刻度均勻分佈。
  • numpy.random.rand() 返回一個由[0,1)內的隨機陣列成的陣列。
x = np.arange(5)
print(x)

[0 1 2 3 4]

x = np.linspace(start=0, stop=2, num=9)
print(x) 

[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]

x = np.logspace(0, 1, 5)
print(np.around(x, 2))

[ 1. 1.78 3.16 5.62 10. ]

x = np.random.random(5)
print(x)

[0.41768753 0.16315577 0.80167915 0.99690199 0.11812291]

結構陣列建立

  • 利用字典來定義結構
personType = np.dtype({
    'names': ['name', 'age', 'weight'],
    'formats': ['U30', 'i8', 'f8']})

a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
             dtype=personType)
print(a, type(a))

[('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)] <class 'numpy.ndarray'>

  • 利用包含多個元組的列表來定義結構
personType = np.dtype([('name', 'U30'), ('age', 'i8'), ('weight', 'f8')])
a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],
             dtype=personType)
print(a, type(a))

[('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)] <class 'numpy.ndarray'>

5.陣列屬性

在使用 numpy 時,你會想知道陣列的某些資訊。很幸運,在這個包裡邊包含了很多便捷的方法,可以給你想要的資訊。

  • numpy.ndarray.ndim用於返回陣列的維數(軸的個數)也稱為秩,一維陣列的秩為 1,二維陣列的秩為 2,以此類推。
  • numpy.ndarray.shape表示陣列的維度,返回一個元組,這個元組的長度就是維度的數目,即 ndim 屬性(秩)。
  • numpy.ndarray.size陣列中所有元素的總量,相當於陣列的shape中所有元素的乘積,例如矩陣的元素總量為行與列的乘積。
  • numpy.ndarray.dtype ndarray 物件的元素型別。
  • numpy.ndarray.itemsize以位元組的形式返回陣列中每一個元素的大小。
a = np.array([1, 2, 3, 4, 5])
print(a.shape)  # (5,)
print(a.dtype)  # int32
print(a.size)  # 5
print(a.ndim)  # 1
print(a.itemsize)  # 4

(5,)
int32
5
1
4