今天要来继续介绍关於 NumPy 的应用。
资料型态、数学运算等等
Type | 说明 |
---|---|
bool |
布林值 |
int8 |
8 位元有号整数 |
int16 |
16 位元有号整数 |
int32 |
32 位元有号整数 |
int64 |
64 位元有号整数 |
uint8 |
8 位元无号整数 |
uint16 |
16 位元无号整数 |
uint32 |
32 位元无号整数 |
uint64 |
64 位元无号整数 |
float16 |
16 位元浮点数 |
float32 |
32 位元浮点数 |
float64 |
64 位元浮点数 |
complex64 |
64 位元复数 |
complex128 |
128 位元复数 |
在新建一个 ndarray 後,可以指定这个矩阵里面要存的资料的资料型别
import numpy as np
# 用字串指定 Datatype
x = np.array([1, 2, 3], dtype = 'uint8')
# 通过 np.datatype 指定
x = np.array([4, 5, 6], dtype = np.int16)
在建立好矩阵後,可以透过 astype()
将矩阵内元素的元素转换型态。
x = np.array([1, 2, 3], dtype = 'uint8')
test = x.astype('float8')
array.T
这个函式来转置矩阵array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(array1)
#[[1 2 3]
# [4 5 6]
# [7 8 9]]
array1_T = array1.T
print(array1_T)
#[[1 4 7]
# [2 5 8]
# [3 6 9]]
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])
print(array1 + array2)
# [[11 13 15]
# [17 19 21]
# [23 25 27]]
print(array1 - array2)
# [[-9 -9 -9]
# [-9 -9 -9]
# [-9 -9 -9]]
print(array1 * array2)
# [[ 10 22 36]
# [ 52 70 90]
# [112 136 162]]
print(array1 / array2)
# [[0.1 0.18181818 0.25 ]
# [0.30769231 0.35714286 0.4 ]
# [0.4375 0.47058824 0.5 ]]
这边的 *
运算不是矩阵的内鸡 dot
运算,是把同样位置的元素乘起来而已。
若要计算矩阵的内积,要通过 np.dot()
来运算
print(np.dot(array1, array2))
#[[ 84 90 96]
# [201 216 231]
# [318 342 366]]
矩阵运算的两个矩阵应该形状要相同,才能运算。在 NumPy 中引入了广播(broadcasting)的概念,用於当两个矩阵的形状不相等时,会自动补齐资料来让运算可以继续执行。
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2 = array1 + 1
print(array2)
# [[ 2 3 4]
# [ 5 6 7]
# [ 8 9 10]]
这边矩阵 array1
跟 1 相加,可以把 1 当作是一个 1x1 的矩阵,他被广播成了 3x3,其他空格都用 1 来填充。
实际上他做的事情是
array1 + np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
如果相加的两个矩阵中,有其他一个维度一样
array1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array3 = np.array([1, 2, 3])
print(array1 + array3)
# [[ 2 4 6]
# [ 5 7 9]
# [ 8 10 12]]
矩阵 array1
是一个 3x3 的矩阵,矩阵 array3
是一个 1x3 的矩阵,当他们有满足某一个维度一样,NumPy 会把 array3
的那一行广播到变成三行。
待续...
<<: Day26:26 - 优化 - 後端 & 前端 - 忘记密码
>>: Day 28 shared_preferences本机存放区
今天的目标 要怎麽简单快速地做出客制化地文件?今天,我们会教用 GAS 搭配 Goolge Doc。...
Background 在前後端分离的专案维护一份完整且及时更新的api文件会极大的提高我们的工作效率...
昨天介绍的全手动安装是对系统掌控的一种极端,而今天要介绍的,是对系统洁癖的另一种极端。假如你受够了要...
奇怪的知识增加了!原来程序还可以这样用?! 这次在Software Development的热门文章...
前言 相信很多刚开始接触CSS或想对切版有所认识,都知道Amos老师吧!! 非常非常感谢老师的系列教...