NumPy簡介及教程(一)
阿新 • • 發佈:2019-02-06
NumPy 簡介及教程
NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維陣列物件和用於處理陣列的例程集合組成的庫。
NumPy - Ndarray 物件
NumPy 中定義的最重要的物件是稱為 ndarray 的 N 維陣列型別。 它描述相同型別的元素集合。 可以使用基於零的索引訪問集合中的專案。
ndarray中的每個元素在記憶體中使用相同大小的塊。 ndarray中的每個元素是資料型別物件的物件(稱為 dtype)。
從ndarray物件提取的任何元素(通過切片)由一個數組標量型別的 Python 物件表示。 下圖顯示了ndarray,資料型別物件(dtype)和陣列標量型別之間的關係。
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.]]]