1 [numpy](#1 numpy)
numpy全称叫Numerical Python,由C语言开发,摆脱python全局解析锁,运算性能强、用来存储和处理大型矩阵,是科学计算和数据分析的基本工具。
2 [numpy](#2 numpy属性)属性
numpy默认数据类型int64、float64
创建一个3行5列从0到14的数组
import numpy as np
a = np.arange(15).reshape(3, 5)
打印数组print(a)
数组的维度a.shape
数组轴的个数a.ndim
数组元素类型a.dtype
数组中每个元素的字节大小a.itemsize
数组元素的总个数a.size
类型查询type(a)
[3 创建ndarray](#3 创建ndarray)
### [1 array()](#1 array())
数组里的所有元素都是相同数据类型
-
[2 zeros() /ones()/empty()](#2 zeros() /ones()/empty())
zeros()全0数组
ones()全1数组
empty内容随机并且依赖于内存状态的全0数组
数组类型(dtype)都是float64
-
[3 arange()](#3 arange())
arange() 类似 python 的 range() ,创建一个一维 ndarray 数组
np_arange = np.arange(10, 20, 5,dtype=int) #[10,20)步长为5
print (np_arange) # [10, 15]
-
[4 matrix()](#4 matrix())
matrix 是 ndarray 的子类,只能生成 2 维的矩阵
x1 = np.mat("1 2;3 4")
x2 = np.matrix("1,2;3,4")
x3 = np.matrix([[1, 2],[3, 4]])
-
[5 创建随机数矩阵](#5 创建随机数矩阵)
python
import numpy as np
# 3行4列随机多维浮点型数据(二维),rand固定区间[0.0, 1.0)
arr = np.random.rand(3, 4)
print(arr)
# 3行4列随机多维浮点型数据(二维),randn标准正态分布(均值 = 0,标准差 = 1)大部分数字在-2~2
arr = np.random.randn(3, 4)
print(arr)
# 3行4列随机多维整型数据(二维),randint()指定区间[-1, 5)
arr = np.random.randint(-1, 5, size = (3, 4))
print(arr)
# 3行4列随机多维浮点型数据(二维),uniform()指定区间[-1, 5)均匀分布的样本值
arr = np.random.uniform(-1, 5, size = (3, 4))
print(arr)
-
[6 ndarray的数据类型](#6 ndarray的数据类型)
-
指定dtype数据类型
-
astype()转换数组的数据类型
python
import numpy as np
zeros_float_arr = np.zeros((3, 4), dtype=np.float32)
print(zeros_float_arr.dtype) #float32
# astype将数组的数据类型转换为int32
zeros_int_arr = zeros_float_arr.astype(np.int32)
print(zeros_int_arr.dtype) #int32
-
[7 等比/等差数列](#7 等比/等差数列)
logspace创建一个等比数列的一维数组
python
import numpy as np
a = np.logspace(0, 0, 10) # 开始点为0,结束点为0,元素个数为10
print(a) # [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
a = np.logspace(0, 9, 10) # 0代表10的0次方,9代表10的9次方
print(a) # [1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]
a = np.logspace(0, 9, 10, base=2) # 改变基数,以2为底数
print(a) # [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
linspace创建一个等差数列的一维数组
python
import numpy as np
a = np.linspace(1,10,10) # 起始点,终止点,数列的个数
print(a) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
print(a.dtype) # float64
a = np.linspace(1,10,10,endpoint=False) # endpoint指定是否包含终止值,默认值为True
print(a) # [1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]
[4 NumPy内置函数](#4 NumPy内置函数)
-
[1 基本函数](#1 基本函数)
-
np.ceil(): 向上最接近的整数,参数是 number 或 array
-
np.floor(): 向下最接近的整数,参数是 number 或 array
-
np.rint(): 四舍五入,参数是 number 或 array
-
np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
-
np.multiply(): 元素相乘,参数是 number 或 array
-
np.divide(): 元素相除,参数是 number 或 array
-
np.abs():元素的绝对值,参数是 number 或 array
-
np.where(condition, x, y): 三元运算符,x if condition else y
python
import numpy as np
# randn()标准正态分布
arr = np.random.randn(2, 3)
print(arr)
"""
[[ 0.62075155 -0.39586061 0.07556188]
[ 1.14602401 0.61087754 1.3770935 ]]
"""
print(np.ceil(arr))
"""
[[ 1. -0. 1.]
[ 2. 1. 2.]]
"""
print(np.floor(arr))
"""
[[ 0. -1. 0.]
[ 1. 0. 1.]]
"""
print(np.rint(arr))
"""
[[ 1. -0. 0.]
[ 1. 1. 1.]]
"""
print(np.isnan(arr))
"""
[[False False False]
[False False False]]
"""
print(np.multiply(arr, arr))
"""
[[0.38533249 0.15670562 0.0057096 ]
[1.31337102 0.37317137 1.8963865 ]]
"""
print(np.divide(arr, arr))
"""
[[1. 1. 1.]
[1. 1. 1.]]
"""
print(np.abs(arr))
"""
[[0.62075155 0.39586061 0.07556188]
[1.14602401 0.61087754 1.3770935 ]]
"""
print(np.where(arr > 0, 1, -1))
"""
[[ 1 -1 1]
[ 1 1 1]]
"""
-
[2 统计函数](#2 统计函数)
-
np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
-
np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
-
np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
-
np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
-
np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按第0个维度统计,值为1则按第1个维度统计。
python
import numpy as np
arr = np.arange(12).reshape(3, 4)
print(arr)
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
print(np.cumsum(arr)) # 前缀和
"""
[ 0 1 3 6 10 15 21 28 36 45 55 66]
"""
print(np.sum(arr)) # 所有元素的和66
print(np.sum(arr, axis=0)) # 数组的按第0个维度统计和[12 15 18 21]
print(np.sum(arr, axis=1)) # 数组的按第1个维度统计和[ 6 22 38]
-
[3 比较函数](#3 比较函数)
- np.any(): 至少有一个元素满足指定条件,返回True
- np.all(): 所有的元素满足指定条件,返回True
python
import numpy as np
arr = np.random.randn(2,3) # randn(均值 = 0,标准差 = 1)大部分数字在-2~2
print(arr)
"""
[[-0.37764946 0.19308709 -0.21882821]
[ 2.32190081 1.79766043 -0.21875982]]
"""
print(np.any(arr > 0))
print(np.all(arr > 0))
-
[4 去重函数](#4 去重函数)
np.unique():找到唯一值并返回排序结果,类似于Python的set集合
python
import numpy as np
arr = np.array([[1, 4, 1], [3, 2, 1]])
print(arr)
"""
[[1 4 1]
[3 2 1]]
"""
print(np.unique(arr)) # [1 2 3 4]
-
[5 排序函数](#5 排序函数)
python
import numpy as np
arr = np.array([1, 2, 34, 5])
# np.sort()返回排序后的副本
sortarr1 = np.sort(arr)
print(sortarr1)
print(arr)
# ndarray直接调用sort,在原数据上进行修改
arr.sort()
print(arr)
[5 NumPy运算](#5 NumPy运算)
### [1 基本运算](#1 基本运算)
python
import numpy as np
a = np.array([10, 10, 10, 10])
b = np.arange(4)
c = a + b
print(a) # [10 10 10 10]
print(b) # [0 1 2 3]
print(c) # [10 11 12 13]
-
[2 矩阵乘法](#2 矩阵乘法)
np.dot / x.dot(y) 【矩阵乘法】 (数学里的点积、行列相乘求和)
python
import numpy as np
x = np.array(
[[1, 1, 1],
[1, 1, 1]]
)
y = np.array(
[[1, 1],
[1, 1],
[1, 1]]
)
print(x.dot(y))
print(np.dot(x, y))
"""
[[3 3]
[3 3]]
"""
*【逐元素相乘】(对应位置的数字直接相乘)
python
import numpy as np
a = np.array(
[[2, 2, 2],
[3, 3, 3]]
)
b = np.array(
[[2, 2, 2],
[3, 3, 3]]
)
print(a * b)
"""
[[4 4 4]
[9 9 9]]
"""