Python numpy array 陣列

本篇要介紹使用 python 搭配 numpy 模組存放陣列資料,讓你在處理大型陣列資料時能夠快速地處理!而且最厲害的是還可以支援陣列運算唷!

當 Python 處理龐大資料時,其原生 list 效能表現並不理想,
我自己覺得使用 numpy 好處是可以整個陣列作運算,例如:

1
2
3
4
5
np1 = np.array([1, 2, 3])
print(np1 - 1) # [0 1 2]
print(np1 + 2) # [3 4 5]
print(np1 * 3) # [3 6 9]
print(np1 / 4) # [0.25 0.5 0.75]

以下介紹如何建立 numpy 陣列:

1
2
3
4
5
6
7
8
9
10
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np

np1 = np.array([1, 2, 3])
print(np1) # [1 2 3]

np2 = np.array([[2,3,4],[3,4,5]])
print(np2)
"""
[[2 3 4]
[3 4 5]]
"""

print(np1 + np2)
"""
[[3 5 7]
[4 6 8]]
"""

print(np2.shape[0]) # 2
print(np2.shape[1]) # 3

# 全為0
np3 = np.zeros([2, 3])
print(np3)
"""
[[0. 0. 0.]
[0. 0. 0.]]
"""

# 全為1
np4 = np.ones([2, 3])
print(np4)
"""
[[1. 1. 1.]
[1. 1. 1.]]
"""

# 接近0
np5 = np.empty((3,4))
print(np5)
"""
[[1.54136387e-316 6.90035230e-310 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]]
"""

np6 = np.array([1,2,3,4,5,6])
np7 = np6.reshape(2,3)
print(np6) # [1 2 3 4 5 6]
print(np7)
"""
[[1 2 3]
[4 5 6]]
"""

# 共用同一組數據,修改一個數據的元素,另一個數據也會改變
np6[2] = 10
print(np7)
"""
[[ 1 2 10]
[ 4 5 6]]
"""

# 取出第二row, 取出的數據是共用同一組數據,修改一個數據的元素,另一個數據也會改變
np8 = np7[1, :]
print(np8) # [4 5 6]
# 取出第二column, 取出的數據是共用同一組數據,修改一個數據的元素,另一個數據也會改變
np9 = np7[:, 1]
print(np9) # [2 5]

參考
https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/2-2-np-array/
https://blog.techbridge.cc/2017/07/28/data-science-101-numpy-tutorial/

範例. numpy.append 添加元素

numpy.append 語法為numpy.append(arr, values, axis)
numpy.append 會添加values值到arr陣列尾部,會回傳一個新配置的陣列,輸入陣列的維度必須相符合。
以下為範例,
a 為 2x3 的矩陣 (numpy.ndarray),
b 為 1x3 的矩陣 (numpy.ndarray),全部為0
b 為 3x1 的矩陣 (numpy.ndarray),全部為1

1
2
3
4
5
6
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> b = np.ones((1, 3))
>>> c = np.zeros((2, 1))
>>> a
array([[1, 2, 3],
[4, 5, 6]])

a 添加一行 1x3 [[7, 8, 9]] 矩陣,並指定axis=0

1
2
3
4
>>> np.append(a, [[7, 8, 9]], axis=0)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

a 添加一列 2x1 [[1], [2]] 矩陣,並指定axis=1

1
2
3
>>> np.append(a, [[1], [2]], axis=1)
array([[1, 2, 3, 1],
[4, 5, 6, 2]])

a 添加一行 1x3 [[7, 8, 9]] 矩陣,不指定axis

1
2
>>> np.append(a, [[7, 8, 9]])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

a 添加 b 在最後一行

1
2
3
4
>>> np.append(a, b, axis=0)
array([[1., 2., 3.],
[4., 5., 6.],
[1., 1., 1.]])

a 添加 c 在最後一列

1
2
3
>>> np.append(a, c, axis=1)
array([[1., 2., 3., 0.],
[4., 5., 6., 0.]])

參考
NumPy數組操作 - NumPy教程
https://www.1ju.org/numpy/numpy-array-manipulation

範例. 字串陣列 numpy.str 轉整數陣列 numpy.int32

1
2
3
4
5
6
7
8
9
10
>>> a = np.array(['123', '234'])
>>> b = np.array(a, dtype=int)
>>> print(a)
['123' '234']
>>> type(a[0])
<class 'numpy.str_'>
>>> print(b)
[123 234]
>>> type(b[0])
<class 'numpy.int64'>

範例. 矩陣取一行,矩陣取一欄

取出矩陣的某一列

1
2
3
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[1]
array([4, 5, 6])

取出矩陣的某一欄

1
2
3
4
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> b = a[:,1]
>>> b
array([2, 5])

參考
Python numpy 提取矩阵的某一行或某一列_Python_luoganttcc的博客-CSDN博客
https://blog.csdn.net/luoganttcc/article/details/74080768

範例. .ndim 看資料 ndarray 有多少維度

1
2
3
4
5
6
7
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a.ndim
2
>>> b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
2
>>> c = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
1

參考
[Day14]Numpy的ndarray! - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
https://ithelp.ithome.com.tw/articles/10195434

相關主題
Python 使用 numpy 讀取 csv 資料再畫圖