1. Numpy 数值类型
NumPy是一个用Python编写的开源数学软件库,能够处理来自任何其它语言的数值数据。在NumPy中定义了多种基本数值类型,包括整型、浮点型、复数型等。下面来逐一介绍一下这些基本的数值类型。
1.1 整型(int)
整型是一种基本的数据类型,用于表示整数。在NumPy中,整型有多种不同的类型,如下所示:
import numpy as np
a = np.int8(1)
b = np.int16(2)
c = np.int32(3)
d = np.int64(4)
print(a)
print(b)
print(c)
print(d)
输出结果为:
1
2
3
4
整型的大小在不同的系统上可能会有所不同,但通常情况下,np.int32和np.int64对应于C语言中的int型和long型。
1.2 浮点数(float)
浮点数是一种基本的数据类型,用于表示实数。在NumPy中,浮点数有多种不同的类型,如下所示:
f = np.float16(1.0)
g = np.float32(2.0)
h = np.float64(3.0)
print(f)
print(g)
print(h)
输出结果为:
1.0
2.0
3.0
NumPy中的浮点数采用IEEE 754标准表示,np.float32对应于单精度浮点数(32位),np.float64对应于双精度浮点数(64位)。
1.3 复数(complex)
复数是一种基本的数据类型,用于表示具有实部和虚部的数。在NumPy中,复数有多种不同的类型,如下所示:
z1 = np.complex64(1.0 + 2.0j)
z2 = np.complex128(3.0 + 4.0j)
print(z1)
print(z2)
输出结果为:
(1+2j)
(3+4j)
np.complex64对应于单精度复数(64位),np.complex128对应于双精度复数(128位)。
1.4 布尔(bool)
布尔是一种基本的数据类型,用于表示True和False两个值。在NumPy中,布尔类型与整型类型可以互相转换。
bool_arr = np.array([True, False, True, False])
int_arr = bool_arr.astype(np.int32)
print(bool_arr)
print(int_arr)
输出结果为:
[ True False True False]
[1 0 1 0]
1.5 字符串(string)
字符串是一种基本的数据类型,用于表示文本。在NumPy中,字符串类型可以通过指定字节数和编码来创建。
str_arr = np.array(['hello', 'world'], dtype=np.string_)
print(str_arr)
输出结果为:
[b'hello' b'world']
2. Numpy 数值运算
NumPy 支持各种数学运算,例如加、减、乘、除等操作。可以使用NumPy数组来执行这些运算。
2.1 数组运算
在NumPy中,数组可以进行逐元素计算,例如加、减、乘、除等操作。需要注意的是,每个操作数必须具有相同的维度和形状。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
d = a - b
e = a * b
f = a / b
print(c)
print(d)
print(e)
print(f)
输出结果为:
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
2.2 矩阵运算
在NumPy中,矩阵可以进行矩阵乘法、矩阵转置等操作。需要注意的是,矩
阵乘法的要求是前一个矩阵的列数等于后一个矩阵的行数。
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)
D = A.transpose()
print(C)
print(D)
输出结果为:
[[19 22]
[43 50]]
[[1 3]
[2 4]]
2.3 广播
广播是一种NumPy数组的特性,它使得不同形状的数组可以参与运算。广播规则如下:
如果两个数组的形状相同,则可以进行逐元素运算。
如果两个数组的形状不同,但是可以通过在某个维度上添加新的维度来变得相同,则可以进行广播。
如果两个数组的形状不同,而且不能通过广播使它们变得相同,则会抛出异常。
a = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
c = a * b
print(c)
输出结果为:
[[ 5 12]
[15 24]]
2.4 数值函数
NumPy还提供了许多数值函数,例如指数、对数、三角函数、数组的最大值和最小值等等。这些函数可以对数组中的每个元素进行计算。
a = np.array([1, 2, 3])
b = np.exp(a)
c = np.log(a)
d = np.sin(a)
print(b)
print(c)
print(d)
输出结果为:
[ 2.71828183 7.3890561 20.08553692]
[0. 0.69314718 1.09861229]
[0.84147098 0.90929743 0.14112001]
2.5 聚合函数
NumPy还提供了许多聚合函数,例如数组的和、平均数、标准差、方差、最大值和最小值等等。这些函数可以对整个数组进行计算。
a = np.array([1, 2, 3])
b = np.sum(a)
c = np.mean(a)
d = np.std(a)
print(b)
print(c)
print(d)
输出结果为:
6
2.0
0.816496580927726
2.6 数组索引与切片
在NumPy中,可以使用索引和切片操作从数组中取出元素或子数组。
2.6.1 索引
使用索引操作可以从数组中取出单个元素。
a = np.array([1, 2, 3])
b = a[1]
print(b)
输出结果为:
2
2.6.2 切片
使用切片操作可以从数组中取出一个子数组。
a = np.array([1, 2, 3, 4, 5])
b = a[1:4]
print(b)
输出结果为:
[2 3 4]
2.7 随机数生成
在NumPy中,可以使用随机数生成器生成各种随机数。常用的随机数包括正态分布和均匀分布两种。
rng = np.random.RandomState(42)
a = rng.randn(5)
b = rng.uniform(0, 1, 5)
print(a)
print(b)
输出结果为:
[ 0.49671415 -0.1382643 0.64768854 1.52302986 -0.23415337]
[0.37454012 0.95071431 0.73199394 0.59865848 0.15601864]
3. 总结
本文介绍了NumPy中常用的数值类型和数值运算,其中包括整型、浮点型、复数型、布尔型和字符串型等基本数据类型,以及数组运算、矩阵运算、广播、数值函数、聚合函数、数组索引与切片等常用的数值操作。同时,本文还介绍了如何使用NumPy生成随机数。