Numpy學習 Day1
Numpy學習 Day1
[toc]
常量
-
numpy.nan
-
表示空值,nan = NaN = NAN
-
兩個
numpy.nan
是不相等的 -
numpy.isnan(x, *args, **kwargs)
逐個元素的測試nan,並將結果以布林陣列返回。
-
-
numpy.inf
- 表示正無窮大, Inf = inf = infty = Infinity = PINF
-
numpy.pi
- 表示圓周率 pi = 3.1415926535897932384626433…
-
numpy.e
- 表示自然常數 e = 2.71828182845904523536028747135266249775724709369995…
資料型別
-
常見資料型別
型別 備註 說明 bool_ = bool8 8位 布林型別 int8 = byte 8位 整型 int16 = short 16位 整型 int32 = intc 32位 整型 int_ = int64 = long = int0 = intp 64位 整型 uint8 = ubyte 8位 無符號整型 uint16 = ushort 16位 無符號整型 uint32 = uintc 32位 無符號整型 uint64 = uintp = uint0 = uint 64位 無符號整型 float16 = half 16位 浮點型 float32 = single 32位 浮點型 float_ = float64 = double 64位 浮點型 str_ = unicode_ = str0 = unicode Unicode 字串 datetime64 日期時間型別 timedelta64 表示兩個時間之間的間隔 -
建立資料型別
-
numpy 的數值型別實際上是 dtype 物件的例項。
-
每個內建型別都有一個唯一定義它的字元程式碼
字元 對應型別 備註 b boolean ‘b1’ i signed integer ‘i1’, ‘i2’, ‘i4’, ‘i8’ u unsigned integer ‘u1’, ‘u2’ ,‘u4’ ,‘u8’ f floating-point ‘f2’, ‘f4’, ‘f8’ c complex floating-point m timedelta64 表示兩個時間之間的間隔 M datetime64 日期時間型別 O object S (byte-)string S3表示長度為3的字串 U Unicode Unicode 字串 V void
-
-
資料型別資訊
-
NumPy和Python整數型別的行為在整數溢位方面存在顯著差異,與 NumPy 不同,Python 的
int
是靈活的。這意味著Python整數可以擴充套件以容納任何整數並且不會溢位。 -
numpy.iinfo()
可以例項化檢視int資料型別的最大值(.max)、最小值(.min)import numpy as np ii16 = np.iinfo(np.int16) print(ii16.min) # -32768 print(ii16.max) # 32767
-
numpy.finfo()
可以例項化檢視float資料型別的最大值(.max)、
最小值(.min)、
eps是取非負的最小值
bits位數
import numpy as np ff16 = np.finfo(np.float16) print(ff16.bits) # 16 print(ff16.min) # -65500.0 print(ff16.max) # 65500.0 print(ff16.eps) # 0.000977
-
時間日期和時間增量
-
datetime64 基礎
-
在 numpy 中,我們很方便的將字串轉換成時間日期型別
datetime64
(datetime
已被 python 包含的日期時間庫所佔用)。datatime64
是帶單位的日期時間型別,其單位如下:日期單位 程式碼含義 時間單位 程式碼含義 Y 年 h 小時 M 月 m 分鐘 W 周 s 秒 D 天 ms 毫秒 - - us 微秒 - - ns 納秒 - - ps 皮秒 - - fs 飛秒 - - as 阿託秒 -
從字串建立 datetime64 型別時,預設情況下,numpy 會根據字串自動選擇對應的單位。
-
從字串建立 datetime64 型別時,可以強制指定使用的單位。
-
如果兩個 datetime64 物件具有不同的單位,它們可能仍然代表相同的時刻。並且從較大的單位(如月份)轉換為較小的單位(如天數)是安全的。
-
從字串建立 datetime64 陣列時,如果單位不統一,則一律轉化成其中最小的單位。
-
使用arange()建立 datetime64 陣列,用於生成日期範圍。
-
-
datetime64 和 timedelta64 運算
-
timedelta64 表示兩個 datetime64 之間的差。timedelta64 也是帶單位的,並且和相減運算中的兩個 datetime64 中的較小的單位保持一致。
-
生成 timedelta64時,要注意年(‘Y’)和月(‘M’)這兩個單位無法和其它單位進行運算(一年有幾天?一個月有幾個小時?這些都是不確定的)。
-
numpy.datetime64 與 datetime.datetime 相互轉換
import numpy as np import datetime dt = datetime.datetime(year=2020, month=6, day=1, hour=20, minute=5, second=30) dt64 = np.datetime64(dt, 's') print(dt64, dt64.dtype) # 2020-06-01T20:05:30 datetime64[s] dt2 = dt64.astype(datetime.datetime) print(dt2, type(dt2)) # 2020-06-01 20:05:30 <class 'datetime.datetime'>
-
-
datetime64 的應用
-
為了允許在只有一週中某些日子有效的上下文中使用日期時間,NumPy包含一組“busday”(工作日)功能。
numpy.busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None)
-
將指定的偏移量應用於工作日,單位天(‘D’)。計算下一個工作日,如果當前日期為非工作日,預設報錯。可以指定
forward
或backward
規則來避免報錯。(一個是向前取第一個有效的工作日,一個是向後取第一個有效的工作日)import numpy as np # 2020-07-10 星期五 a = np.busday_offset('2020-07-10', offsets=1) print(a) # 2020-07-13 a = np.busday_offset('2020-07-11', offsets=1) print(a) # ValueError: Non-business day date in busday_offset
-
可以指定偏移量為 0 來獲取當前日期向前或向後最近的工作日,當然,如果當前日期本身就是工作日,則直接返回當前日期。
a = np.busday_offset('2020-07-11', offsets=0, roll='forward') b = np.busday_offset('2020-07-11', offsets=0, roll='backward') print(a) # 2020-07-13 print(b) # 2020-07-10 a = np.busday_offset('2020-07-11', offsets=1, roll='forward') b = np.busday_offset('2020-07-11', offsets=1, roll='backward') print(a) # 2020-07-14 print(b) # 2020-07-13
-
返回指定日期是否是工作日。
is_busday()
import numpy as np # 2020-07-10 星期五 a = np.is_busday('2020-07-10') b = np.is_busday('2020-07-11') print(a) # True print(b) # False
-
統計一個
datetime64[D]
陣列中的工作日天數。np.arange(begindates, enddates, dtype='datetime64')
np.count_nonzero(np.is_busday(a))
import numpy as np # 2020-07-10 星期五 begindates = np.datetime64('2020-07-10') enddates = np.datetime64('2020-07-20') a = np.arange(begindates, enddates, dtype='datetime64') b = np.count_nonzero(np.is_busday(a)) print(a) # ['2020-07-10' '2020-07-11' '2020-07-12' '2020-07-13' '2020-07-14' # '2020-07-15' '2020-07-16' '2020-07-17' '2020-07-18' '2020-07-19'] print(b) # 6
-
自定義周掩碼值,即指定一週中哪些星期是工作日。
np.is_busday(weekmask=[1, 1, 1, 1, 1, 0, 0])
# 2020-07-10 星期五 a = np.is_busday('2020-07-10', weekmask=[1, 1, 1, 1, 1, 0, 0]) b = np.is_busday('2020-07-10', weekmask=[1, 1, 1, 1, 0, 0, 1]) print(a) # True
print(b) # False
- 返回兩個日期之間的工作日數量。 ```numpy.busday_count(begindates, enddates, weekmask='1111100', holidays=[], busdaycal=None, out=None)``` ```python import numpy as np # 2020-07-10 星期五 begindates = np.datetime64('2020-07-10') enddates = np.datetime64('2020-07-20') a = np.busday_count(begindates, enddates) b = np.busday_count(enddates, begindates) print(a) # 6 print(b) # -6
-
陣列的建立
import numpy as np
numpy 提供的最重要的資料結構是ndarray
,它是 python 中list
的擴充套件。
-
依據現有資料來建立 ndarray
-
通過array()函式進行建立
def array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0):
-
通過asarray()函式進行建立
-array()
和asarray()
都可以將結構資料轉化為 ndarray,但是array()
和asarray()
主要區別就是當資料來源是ndarray 時,array()
仍然會 copy 出一個副本,佔用新的記憶體,但不改變 dtype 時asarray()
不會。
- 更改為較大的dtype時,其大小必須是array的最後一個axis的總大小(以位元組為單位)的除數 -
通過fromfunction()函式進行建立
給函式繪圖的時候可能會用到
fromfunction()
,該函式可從函式中建立陣列。def fromfunction(function, shape, **kwargs):
-
-
依據 ones 和 zeros 填充方式
在機器學習任務中經常做的一件事就是初始化引數,需要用常數值或者隨機值來建立一個固定大小的矩陣。
-
零陣列
-
zeros()
函式:返回給定形狀和型別的零陣列。輸入的是shape -
zeros_like()
函式:返回與給定陣列形狀和型別相同的零陣列。輸入的是arraydef zeros(shape, dtype=None, order='C'): def zeros_like(a, dtype=None, order='K', subok=True, shape=None):
-
-
1陣列
-
ones()
函式:返回給定形狀和型別的1陣列。 -
ones_like()
函式:返回與給定陣列形狀和型別相同的1陣列。def ones(shape, dtype=None, order='C'): def ones_like(a, dtype=None, order='K', subok=True, shape=None):
-
-
空陣列
-
empty()
函式:返回一個空陣列,陣列元素為隨機數。 -
empty_like
函式:返回與給定陣列具有相同形狀和型別的新陣列def empty(shape, dtype=None, order='C'): def empty_like(prototype, dtype=None, order='K', subok=True, shape=None):
-
-
單位陣列
-
eye()
函式:返回一個對角線上為1,其它地方為零的單位陣列。 -
identity()
函式:返回一個方的單位陣列。def eye(N, M=None, k=0, dtype=float, order='C'): def identity(n, dtype=None):
-
-
對角陣列
-
diag()
函式:提取對角線或構造對角陣列。def diag(v, k=0):
import numpy as np x = np.arange(9).reshape((3, 3)) print(x) # [[0 1 2] # [3 4 5] # [6 7 8]] print(np.diag(x)) # [0 4 8] print(np.diag(x, k=1)) # [1 5] print(np.diag(x, k=-1)) # [3 7] 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()
函式:返回與給定陣列具有相同形狀和型別的常數陣列。def full(shape, fill_value, dtype=None, order='C'): def full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None):
-
-
-
利用數值範圍來建立ndarray
-
arange()
函式:返回給定間隔內的均勻間隔的值。 -
linspace()
函式:返回指定間隔內的等間隔數字。 -
logspace()
函式:返回數以對數刻度均勻分佈。 -
numpy.random.rand()
返回一個由[0,1)內的隨機陣列成的陣列。def arange([start,] stop[, step,], dtype=None): def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0): def logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0): def rand(d0, d1, ..., dn):
-
-
結構陣列的建立
結構陣列,首先需要定義結構,然後利用
np.array()
來建立陣列,其引數dtype
為定義的結構。-
利用字典來定義結構
import numpy as np 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'>
-
利用包含多個元組的列表來定義結構
import numpy as np 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'> # 結構陣列的取值方式和一般陣列差不多,可以通過下標取得元素: print(a[0]) # ('Liming', 24, 63.9) print(a[-2:]) # [('Mike', 15, 67. ) ('Jan', 34, 45.8)] # 我們可以使用欄位名作為下標獲取對應的值 print(a['name']) # ['Liming' 'Mike' 'Jan'] print(a['age']) # [24 15 34] print(a['weight']) # [63.9 67. 45.8]
-
陣列的屬性
在使用 numpy 時,你會想知道陣列的某些資訊。很幸運,在這個包裡邊包含了很多便捷的方法,可以給你想要的資訊。
numpy.ndarray.ndim
用於返回陣列的維數(軸的個數)也稱為秩,一維陣列的秩為 1,二維陣列的秩為 2,以此類推。numpy.ndarray.shape
表示陣列的維度,返回一個元組,這個元組的長度就是維度的數目,即ndim
屬性(秩)。numpy.ndarray.size
陣列中所有元素的總量,相當於陣列的shape
中所有元素的乘積,例如矩陣的元素總量為行與列的乘積。numpy.ndarray.dtype
ndarray
物件的元素型別。numpy.ndarray.itemsize
以位元組的形式返回陣列中每一個元素的大小。- 在
ndarray
中所有元素必須是同一型別,否則會自動向下轉換,int->float->str
。
-
相關文章
- Numpy學習(2)numpy向量化、numpy操作
- Numpy學習筆記筆記
- NumPy 學習(1): ndarrays
- numpy 學習總結
- Numpy學習筆記 1筆記
- Numpy學習筆記(1)筆記
- python_numPy學習Python
- Python之numpy學習Python
- MySQL深入學習-day1MySql
- python學習day1Python
- day1 指標學習指標
- numpy的學習筆記\pandas學習筆記筆記
- numpy學習筆記 – numpy陣列的常見用法筆記陣列
- Python NumPy學習總結Python
- 【Numpy學習08】陣列迭代陣列
- 【Task02】Numpy學習打卡
- 【Task01】Numpy學習打卡
- 【Task04】Numpy學習打卡
- Numpy與Pandas學習網站學習網站
- python——numpy學習筆記Python筆記
- NumPy 學習(3): 通用函式函式
- python學習之路—day1Python
- Java 學習筆記--Day1Java筆記
- TA學習記錄Day1
- ORID學習法day1
- 【numpy學習筆記】矩陣操作筆記矩陣
- 【numpy學習筆記】 Array processing筆記
- Numpy學習第二天
- 【Numpy學習12】邏輯函式函式
- NumPy 學習(2): 陣列的操作陣列
- 【JAVA Web基礎學習】Day1JavaWeb
- 【Numpy學習】np.count_nonzero()用法解析
- 機器學習之numpy和matplotlib學習(四)機器學習
- 大周H的前端學習day1前端
- 大資料學習日記day1大資料
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- 深度學習day1(第一章:什麼是深度學習?)深度學習
- python綜合學習四之Numpy和Pandas(下)Python