文章目录
import numpy as np
Numpy 基础数据结构
参看ndarray数据属性
例如参看数据,秩,维度,大小…
dtype
(查看数组元素类型)
demo = np.array([1,2,3,4,5,6,7])
demo.dtype
dtype('int32')
ndim
(输出数组维度的个数(轴数),或者说“秩”,维度的数量也称rank)
demo.ndim
1
shape
(数组的维度,对于n行m列的数组,shape为(n,m))
demo.shape
(7,)
size
(数组的元素总数,对于n行m列的数组,元素总数为n*m)
demo.size
7
itemsize
(数组中每个元素的字节大小,int32l类型字节为4,float64的字节为8)
demo.itemsize
4
nbytes
(共多少字节)
demo.nbytes
28
创建数组
用array()
函数,括号里是列表. 元组. 数组.生成器.
np.array(range(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.array([[1,2,3],("a","b","c")])
array([['1', '2', '3'],
['a', 'b', 'c']],
dtype='<U11')
用arange()
,给定间隔内返回均匀间隔值
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(10.0)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
np.arange(5,12)
array([ 5, 6, 7, 8, 9, 10, 11])
np.arange(5,12,3)
array([ 5, 8, 11])
用linspace()
,返回在间隔[开始,停止]上计算的num个均匀间隔的样本.
np.linspace(2.0,3.0,num=5)
array([ 2. , 2.25, 2.5 , 2.75, 3. ])
np.linspace(2.0,3.0,num=5,endpoint=False)
array([ 2. , 2.2, 2.4, 2.6, 2.8])
np.linspace(2.0,3.0,num=5,retstep=True)
(array([ 2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
创建数组 ,zeros(),ones(),eye()
.
np.zeros(5)
array([ 0., 0., 0., 0., 0.])
np.zeros((2,2), dtype = np.int)
array([[0, 0],
[0, 0]])
np.ones(9)
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones((2,3,4))
array([[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]],
[[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]]])
np.eye(5)
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
ndarray 数据类型
ndarray的数据类型
通用属性(函数)
改变数组形状:.T,reshape(),resize()
ar1 = np.array([[1,2,3],[4,5,6]])
ar1
array([[1, 2, 3],
[4, 5, 6]])
ar1.T
array([[1, 4],
[2, 5],
[3, 6]])
ar1.reshape(3,2)
array([[1, 2],
[3, 4],
[5, 6]])
np.resize(np.arange(5),(3,4))## numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。
array([[0, 1, 2, 3],
[4, 0, 1, 2],
[3, 4, 0, 1]])
数组复制 :copy()
ar1 = np.arange(10)
ar2 = ar1
id(ar2) == id(ar1) # 指向内存中生成的一个值 → 这里ar1和ar2指向同一个值,所以ar1改变,ar2一起改变
True
ar3 = ar1.copy()
id(ar3) == id(ar1)
False
数组类型转换:astype()
ar1.astype(np.float32)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], dtype=float32)
数组堆叠
a = np.arange(5)
b = np.arange(5,10)
a
array([0, 1, 2, 3, 4])
b
array([5, 6, 7, 8, 9])
水平叠加
np.hstack((a,b)) # 真正意义水平叠加
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.column_stack((a,b)) # 行向量变成列向量叠加
array([[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]])
np.concatenate((a,b),axis=0)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
垂直叠加
a
array([0, 1, 2, 3, 4])
b
array([5, 6, 7, 8, 9])
np.vstack((a,b))
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
np.row_stack((a,b))
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
深度叠加
np.dstack((a,b))
array([[[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]]])
数组拆分
ar = np.arange(16).reshape(4,4)
ar
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
沿横向轴拆分
np.hsplit(ar,2)
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
np.split(ar,2,axis=1)
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
沿纵向轴拆分
np.vsplit(ar,2)
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
np.split(ar,2,axis=0)
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
数组转换成list
ar
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
ar.tolist()
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
数组简单运算
ar = np.arange(20)
ar
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
求和
np.sum(ar)
190
求均值
np.mean(ar)
9.5
求最大值
np.max(ar)
19
求最小值
np.min(ar)
0
标准偏差
np.std(ar)
5.7662812973353983
方差
np.var(ar)
33.25
累加值
np.cumsum(ar)
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,
91, 105, 120, 136, 153, 171, 190], dtype=int32)
累乘积值
np.cumprod(ar)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
索引及切片
基本索引及切片
一维数组的切片和索引(和列表类似)
ar = np.arange(20)
ar
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
ar[4]
4
ar[3:6]
array([3, 4, 5])
二维数组的切片和索引
ar = np.arange(16).reshape(4,4)
ar
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
ar[2]
array([ 8, 9, 10, 11])
ar[2][1]
9
ar[2,1]
9
ar[1:3]
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
ar[:2,1:]
array([[1, 2, 3],
[5, 6, 7]])
布尔型索引及切片
ar = np.arange(12).reshape(3,4)
i = np.array([True,False,True])
j = np.array([True,True,False,False])
ar
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
ar[i,:]
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
ar[:,j]
array([[0, 1],
[4, 5],
[8, 9]])
ar[ar>5]
array([ 6, 7, 8, 9, 10, 11])
数组索引及切片的值更改,复制
ar = np.arange(10)
ar
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ar[7:9] = 100
ar
array([ 0, 1, 2, 3, 4, 5, 6, 100, 100, 9])
随机数
随机数生成
np.random.normal(size=(4,4))
array([[-0.28424203, 1.24778222, -1.87188203, -0.48618607],
[ 2.46265095, -0.10825467, 0.3068793 , -0.23980028],
[ 0.18263344, -0.07816352, 0.6084669 , -0.18581258],
[-1.20808137, -0.8982028 , -0.92821719, -0.96498775]])
numpy.random.rand(d0, d1, ..., dn)
:生成一个[0,1)之间的随机浮点数或N维浮点数组 —— 均匀分布
np.random.rand()
0.5718965755174878
np.random.rand(4)
array([ 0.50897674, 0.96063824, 0.30698317, 0.41407583])
np.random.rand(2,3)
array([[ 0.88528773, 0.87437328, 0.02799432],
[ 0.21416104, 0.03953028, 0.85786322]])
numpy.random.randint(low, high=None, size=None, dtype='l')
:生成一个整数或N维整数数组
np.random.randint(2)
0
np.random.randint(2,size=5)
array([0, 0, 1, 0, 0])
np.random.randint(2,6,size=5)
array([2, 2, 3, 2, 2])
数组广播
当数组跟一个标量进行数学运算时,标量需要根据数组的形状进行扩展,然后执行运算
数据的输入输出
存储数组数据
ar = np.random.rand(5,5)
ar
array([[ 0.92156293, 0.17349579, 0.01742218, 0.80235236, 0.92179612],
[ 0.53347415, 0.66165762, 0.91499678, 0.8456032 , 0.53456262],
[ 0.91645928, 0.56223024, 0.13649131, 0.64904072, 0.27637344],
[ 0.1997809 , 0.47236124, 0.25545203, 0.05874394, 0.26600728],
[ 0.0076774 , 0.77736906, 0.88875863, 0.33249434, 0.04386722]])
np.save('arraydata.npy', ar)
读取数组数据
np.load("arraydata.npy")
array([[ 0.92156293, 0.17349579, 0.01742218, 0.80235236, 0.92179612],
[ 0.53347415, 0.66165762, 0.91499678, 0.8456032 , 0.53456262],
[ 0.91645928, 0.56223024, 0.13649131, 0.64904072, 0.27637344],
[ 0.1997809 , 0.47236124, 0.25545203, 0.05874394, 0.26600728],
[ 0.0076774 , 0.77736906, 0.88875863, 0.33249434, 0.04386722]])