建立数组
在 NumPy 里,大部分的操作都是使用 ndarray 来完成,ndarray 是一个快速的且可以节省空间的多维度数组对象,这篇教学会介绍使用 NumPy 快速建立多维数组 ndarray。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
建立数组的方法
NumPy 有下列几种建立数组 ndarray 的方法:
| 方法 | 适用维度 | 说明 |
|---|---|---|
| numpy.array() | 多维 | 根据现有的串列数据建立数组。 |
| numpy.empty() | 多维 | 建立指定大小的空数组。 |
| numpy.zeros() | 多维 | 建立每个项目数值为 0 的数组。 |
| numpy.ones() | 多维 | 建立每个项目数值为 1 的数组。 |
| numpy.eye() | 多维 | 建立对角线项目为 1,其他项目为 0 的数组。 |
| numpy.tile() | 多维 | 复制现有的数组的内容,依据新的维度建立新数组。 |
| numpy.arange() | 一维 | 建立两个数值间,指定“间距”的“等差”连续数据的数组。 |
| numpy.linspace() | 一维 | 建立两个数值间,指定“数量”的“等差”连续数据数组。 |
| numpy.logspace() | 一维 | 建立两个数值间,指定“数量”的“log 对数”连续数据数组。 |
numpy.array()
numpy.array() 可以根据现有的串列数据建立数组,下方的例子会建立一维、二维与三维数组。
import numpy as np
a = np.array([1,2,3,4]) # 建立一維陣列
b = np.array([[1,2],[3,4]]) # 建立二維陣列
c = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) # 建立三維陣列
print(a)
print(b)
print(c)
建立数组时,设定 ndmin 的数值,可以指定最小维度,下方的例子原本是一维的串列数据,加上 ndmin 的参数后,就会被转换成三维数组。
import numpy as np
a = np.array([1,2,3,4], ndmin=3)
print(a) # [[[1 2 3 4]]] 注意有三層括號,是三維陣列
建立数组时,设定 dtype 的型态,可以将原本串列的数据转换成指定的型态,下方的例子会将原本数字的串列,转换成文字内容的数组。
import numpy as np
a = np.array([1,2,3,4], dtype='U') # 轉換成 unicode 字串的格式
b = np.array([1,2,3,4], dtype='S') # 轉換成二進位字串
print(a) # ['1' '2' '3' '4']
print(b) # [b'1' b'2' b'3' b'4']
numpy.empty()
numpy.empty() 可以建立指定大小的空数组,空数组的意思并非内容全空,而是会以随机数的方式放置项目 ( 操作时再将其置换 )。
import numpy as np
a = np.empty(2) # 建立一維空陣列
b = np.empty([2,2]) # 建立二維空陣列
c = np.empty([2,2,2]) # 建立三維空陣列
print(a)
print(b)
print(c)
numpy.zeros()
numpy.zeros() 可以建立每个项目数值为 0 的数组。
import numpy as np
a = np.zeros(2) # 建立一維 zero 陣列
b = np.zeros([2,2]) # 建立二維 zero 陣列
c = np.zeros([2,2,2]) # 建立三維 zero 陣列
print(a)
print(b)
print(c)
numpy.ones()
numpy.ones() 可以建立每个项目数值为 1 的数组。
import numpy as np
a = np.ones(2) # 建立一維 one 陣列
b = np.ones([2,2]) # 建立二維 one 陣列
c = np.ones([2,2,2]) # 建立三維 one 陣列
print(a)
print(b)
print(c)
numpy.eye()
numpy.eye() 可以建立对角线项目为 1,其他项目为 0 的数组。
import numpy as np
print(np.eye(3)) # 建立 3x3 陣列,對角線起始點為 0
print(np.eye(3,5)) # 建立 3x5 陣列,對角線起始點為 0
print(np.eye(3,5,2)) # 建立 3x3 陣列,對角線起始點為 2
numpy.tile()
numpy.tile() 会复制现有的数组的内容,依据新的维度建立新数组。
a = np.array([1,2,3])
b = np.tile(a, 5) # [1,2,3] 重複 5 次變成一維陣列
c = np.tile(a, (5, 2)) # [1,2,3] 重複放入 5x2 的陣列中
print(b)
print(c)
numpy.arange()
numpy.arange() 可以建立两个数值间,指定“间距”的“等差”连续数据的数组,支援小数点的间隔 ( 设定 dtype 可指定数据型态 )。
import numpy as np
a = np.arange(10) # 建立 1~10,間隔為 1 的陣列
b = np.arange(5,10) # 建立 5~10,間隔為 1 的陣列
c = np.arange(5,10,0.1) # 建立 5~10,間隔為 0.1 的陣列
d = np.arange(5,10,dtype='float') # 建立 5~10,間隔為 1 的浮點數陣列
print(a)
print(b)
print(c)
print(d)
numpy.linspace()
numpy.linspace() 可以建立两个数值间,指定“数量”的“等差”连续数据数组,( 额外设定 endpoint False 表示不包含最后一个数字、设定 dtype 可指定数据型态 )。
import numpy as np
a = np.linspace(5, 10, 10) # 建立 5~10,內容有 10 個項目的陣列
b = np.linspace(5, 10, 10, endpoint=False) # 建立 5~9,內容有 10 個項目的陣列
c = np.linspace(5, 10, 10, dtype='int') # 建立 5~10,內容有 10 個「整數」項目的陣列
print(a)
print(b)
print(c)
numpy.logspace()
numpy.logspace() 可以建立两个数值间,指定“数量”的“log 对数”连续数据数组,( 额外设定 endpoint False 表示不包含最后一个数字、设定 dtype 可指定数据型态 )。
import numpy as np
a = np.logspace(0, 1, 10)
b = np.logspace(0, 1, 10, False)
print(a)
print(b)
微信扫码关注
抖音扫码关注