1. 程式人生 > >NumPy簡介及教程(一)

NumPy簡介及教程(一)

NumPy 簡介及教程

NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維陣列物件和用於處理陣列的例程集合組成的庫。

NumPy - Ndarray 物件

NumPy 中定義的最重要的物件是稱為 ndarray 的 N 維陣列型別。 它描述相同型別的元素集合。 可以使用基於零的索引訪問集合中的專案。
ndarray中的每個元素在記憶體中使用相同大小的塊。 ndarray中的每個元素是資料型別物件的物件(稱為 dtype)。

從ndarray物件提取的任何元素(通過切片)由一個數組標量型別的 Python 物件表示。 下圖顯示了ndarray,資料型別物件(dtype)和陣列標量型別之間的關係。
ndarray

NumPy - 資料型別

序號 資料型別及描述
1 bool_儲存為一個位元組的布林值(真或假)
2 int_預設整數,相當於 C 的long,通常為int32或int64
3 intc相當於 C 的int,通常為int32或int64
4 intp用於索引的整數,相當於 C 的size_t,通常為int32或int64
5 int8位元組(-128 ~ 127)
6 int16 16 位整數(-32768 ~ 32767)
7 int32 32 位整數(-2147483648 ~ 2147483647)
8 int64 64 位整數(-9223372036854775808 ~ 9223372036854775807)
9 uint8 8 位無符號整數(0 ~ 255)
10 uint16 16 位無符號整數(0 ~ 65535)
11 uint32 32 位無符號整數(0 ~ 4294967295)
12 uint64 64 位無符號整數(0 ~ 18446744073709551615)
13 float_float64的簡寫
14 float16半精度浮點:符號位,5 位指數,10 位尾數
15 float32單精度浮點:符號位,8 位指數,23 位尾數
16 float64雙精度浮點:符號位,11 位指數,52 位尾數
17 complex_complex128的簡寫
18 complex64複數,由兩個 32 位浮點表示(實部和虛部)
18 complex128複數,由兩個 64 位浮點表示(實部和虛部)

NumPy - 資料屬性

ndarray.shape

import numpy as np
nd1 = np.array([1,2,3,4],[5,6,7,8])
print(nd1)
-> (2,4)

修改shape

nd2 = np.array([[1,2,3],[4,5,6]])
nd2.shape=(3,2)
print(nd2)
->[[1 2]
 [3 4]
 [5 6]]
nd3 = np.arange(0, 150, step=5, dtype=np.float32)
display(nd3.shape, nd3.dtype)
print(nd3)
->(30,)
->dtype('float32')
->[  0.   5.  10.  15.  20.  25.  30.  35.  40.  45.  50.  55.  60.  65.
  70.  75.  80.  85.  90.  95. 100. 105. 110. 115. 120. 125. 130. 135.
 140. 145.]
# num生成多少個數, 全閉區間
nd4 = np.linspace(0,100, num=20)
print(nd4)
# 不使用dtpye屬性改變預設的資料型別,使用numpyd.astype(np.float32)
nd4.astype(np.float32)
->[  0.           5.26315789  10.52631579  15.78947368  21.05263158
  26.31578947  31.57894737  36.84210526  42.10526316  47.36842105
  52.63157895  57.89473684  63.15789474  68.42105263  73.68421053
  78.94736842  84.21052632  89.47368421  94.73684211 100.        ]
->array([  0.      ,   5.263158,  10.526316,  15.789474,  21.052631,
        26.31579 ,  31.578947,  36.842106,  42.105263,  47.36842 ,
        52.63158 ,  57.894737,  63.157894,  68.42105 ,  73.68421 ,
        78.947365,  84.210526,  89.47369 ,  94.73684 , 100.      ],
      dtype=float32)
import numpy as np
import matplotlib.pyplot as plt
nd5 = np.zeros(shape=(46,76,3))
nd5.dtype
# jpg rgb (0-255)
# png rgb (0-1)
plt.imshow(nd5)
-><matplotlib.image.AxesImage at 0x878feb8>

這裡寫圖片描述

nd6 = np.full(shape=(2,3,3),fill_value=0.2)
print(nd6)
->[[[0.2 0.2 0.2]
  [0.2 0.2 0.2]
  [0.2 0.2 0.2]]

->[[0.2 0.2 0.2]
  [0.2 0.2 0.2]
  [0.2 0.2 0.2]]]
nd7  = np.eye(5,5)
print(nd7)
->[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
# ndmin設定最小的維度
nd8 = np.array([1,2,2,3,4], ndmin=2, dtype=float)
print (nd8)
->[[1. 2. 2. 3. 4.]]
# reshape調整陣列大小
nd9 = np.arange(24)
b = nd9.reshape(2,4,3)
print(b)
# itemsize這一陣列屬性返回陣列中每個元素的位元組單位長度。
print(b.itemsize)
print(b.dtype)
->[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]

 ->[[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]
->4
->int32
# ones生成都是1的矩陣
nd10 = np.ones(shape=(3,3,3))
print(nd10)
->[[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

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

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