numpy介绍

文章目录

import numpy as np

Numpy 基础数据结构

Numpy 数组是一个多维数组对象,成为ndarray

参看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]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值