认识Numpy

1. Numpy

创建和使用一维数组

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ["STFangsong"]# 添加字体
plt.rcParams['axes.unicode_minus'] = False  #默认是使用Unicode负号,设置正常显示字符,如正常显示负号
%config InlineBackend.figure_format = 'svg'
# 方法一:通过array函数将python中的list
array1 = np.array([1,2,3,4,5],dtype = 'int32')
array1
array([1, 2, 3, 4, 5])
#数组元素类型
array1.dtype
dtype('int32')
# 数组每个元素占用空间
array1.itemsize
4
#数组元素占用空间
array1.nbytes
20
#数组类型
type(array1)
numpy.ndarray
#数组元素个数
array1.size
5
# 数组的维度
array1.ndim
1
# 数组的形状
array1.shape
(5,)
#三维数组(图片)
lsy = plt.imread('1.jpg')
plt.imshow(lsy)
<matplotlib.image.AxesImage at 0x21f88c898e0>

图片1

# 垂直翻转(行坐标逆序)
plt.imshow(lsy[::-1,:])
<matplotlib.image.AxesImage at 0x21f8917f250>

垂直翻转

# 水平翻转(列坐标逆序)
plt.imshow(lsy[:,::-1])
<matplotlib.image.AxesImage at 0x21f8ba68820>

水平翻转

抠图

head = lsy[:610,500:1000,:]
plt.imshow(head)
<matplotlib.image.AxesImage at 0x1c8e49ce550>

在这里插入图片描述

#方法二:通过arange函数指定数据范围创建一维数组(左闭右开)
array2 = np.arange(10)
array2
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array3 = np.arange(1,20,3)
array3
array([ 1,  4,  7, 10, 13, 16, 19])
array4 = np.arange(1,10,0.5)
array4
array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. ,
       7.5, 8. , 8.5, 9. , 9.5])
# 方法三:通过linspace函数指定范围以及抽取的数据量来创建一维数组
array5 = np.linspace(-5,5,50)  #在闭区间[-5,5]抽取50个元素创建一维数组
array5
array([-5.        , -4.79591837, -4.59183673, -4.3877551 , -4.18367347,
       -3.97959184, -3.7755102 , -3.57142857, -3.36734694, -3.16326531,
       -2.95918367, -2.75510204, -2.55102041, -2.34693878, -2.14285714,
       -1.93877551, -1.73469388, -1.53061224, -1.32653061, -1.12244898,
       -0.91836735, -0.71428571, -0.51020408, -0.30612245, -0.10204082,
        0.10204082,  0.30612245,  0.51020408,  0.71428571,  0.91836735,
        1.12244898,  1.32653061,  1.53061224,  1.73469388,  1.93877551,
        2.14285714,  2.34693878,  2.55102041,  2.75510204,  2.95918367,
        3.16326531,  3.36734694,  3.57142857,  3.7755102 ,  3.97959184,
        4.18367347,  4.3877551 ,  4.59183673,  4.79591837,  5.        ])
#创建两个一维数组
x = np.linspace(-2 * np.pi, 2 * np.pi, 180)
y = np.round(np.sin(x),4)
# x,y
plt.plot(x,y,color = 'pink',marker = '*')
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>

正弦

# 方法四:通过随机函数创建一维数组randint(左闭右开)
# 整数
array6 = np.random.randint(1,100,10)
array6
array([58, 39,  8,  6, 24, 54, 17, 13, 27, 17])
# 小数
array7 = np.random.random(10)
array7
array([0.59853349, 0.73005233, 0.9334901 , 0.73028284, 0.7263449 ,
       0.27506243, 0.51343595, 0.16541789, 0.30377838, 0.71014349])
heights = np.random.normal(169.7,6.5,500)
# np.round(heights,2)
plt.hist(heights,bins = 10)
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>

直方图

array8 = np.arange(1,10)
array8
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 数组的下标(索引)运算
array8[4]
5
# 布尔索引
# 对ndarray进行关系运算会产生一组布尔值
array8 > 5  # 判断array8中所有元素与5比较大小,返回布尔值
array([False, False, False, False, False,  True,  True,  True,  True])
# 保留array8中大于5的元素(比较返回值为True的值保留)
array8[array8>5]
array([6, 7, 8, 9])
# 大于5的偶数   &
array8[(array8 > 5) & (array8 % 2 == 0)]
array([6, 8])
# 大于5或为偶数   |
array8[(array8 > 5) | (array8 % 2 == 0)]
array([2, 4, 6, 7, 8, 9])
# 大于5或为奇数(取反)   ~
array8[(array8 > 5) | ~(array8 % 2 == 0)]
array([1, 3, 5, 6, 7, 8, 9])
# 花式索引  需要元素的索引填入[]
array8[[0,1,0,1,-1,2]]
array([1, 2, 1, 2, 9, 3])
# 切片
array8[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1])

2. 创建二维数组

# 方法一:通过array函数讲话嵌套列表变成二维数组
array9 = np.array([[1,2,3],[4,5,6],[7,8,9]])
array9
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
# 数组形状
array9.shape
(3, 3)
# 数组维度
array9.ndim
2
# 方法二:将一维数组调形调整为二维数组
array10 = array8.reshape((3,3))
array10
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
array9 == array10
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])
array10[array10 > 5]
array([6, 7, 8, 9])
# 方法三:用随机方式创建二维数组
np.random.randint(60,101,(5,3))  #在区间[60,100]取元素创建一个5行3列的二维数组
array([[71, 75, 76],
       [97, 88, 66],
       [87, 88, 99],
       [62, 68, 80],
       [81, 97, 70]])
np.random.randint(60,101,(5,3,3))  #在区间[60,100]取元素创建一个5x(3x3)的三维数组
array([[[ 79, 100,  60],
        [100, 100,  73],
        [ 88,  80,  64]],

       [[ 65,  97,  61],
        [ 97,  61,  61],
        [ 97,  88,  73]],

       [[ 63,  94,  85],
        [ 73,  96, 100],
        [ 98,  94,  99]],

       [[ 99,  77,  79],
        [ 94,  82,  63],
        [ 83,  63,  86]],

       [[ 67,  62,  89],
        [ 70,  83,  80],
        [100,  95,  68]]])
# 方法四:创建一个全0的数组
np.zeros((5,5),dtype = 'int32')
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
# 创建全1数组
np.ones((5,5))
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., 1.]])
# 创建全为指定元素的数组
np.full((5,5),9)
array([[9, 9, 9, 9, 9],
       [9, 9, 9, 9, 9],
       [9, 9, 9, 9, 9],
       [9, 9, 9, 9, 9],
       [9, 9, 9, 9, 9]])
# 单位矩阵
np.eye(3)   # 数字代表阶数
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
# 取指定位置的元素
array10[1,1]
# array10[1][1]
5
# 也支持负向索引
array10[-1,-1]
9
# 取一行一列元素创建为一个二维数组
array10[:1,:1]
array([[1]])
# 取四角元素
array10[::2,::2]
array([[1, 3],
       [7, 9]])

1.3 数组对象的方法

1.3.1获取描述性统计信息
  1. 集中趋势:均值、中位数、众数

  2. 离散趋势:最大值、最小值、极差、四分位距离、方差、标准差

    • 下四分位数(25%分位数),通常记为Q1
    • 中位数(50%分位数),通常记为Q2
    • 上四分位数(75%分位数),通常记为Q3
    • 四分位距离:IQR = Q3 - Q1
    • data < Q1 - 1.5 * IQR
    • data < Q3 + 1.5 * IQR
array11 = np.random.randint(10,100,7)
array11
array([93, 43, 61, 58, 17, 95, 40])
# 平均值
array11.mean()
49.285714285714285
# 排序  不改变原数组
np.sort(array11)
array([16, 31, 39, 51, 64, 65, 79])
# 中位数
np.median(array11)
51.0
array12 = np.array([1,1,3,5,5,5,5,5,6,6,7,8])
array12
array([1, 1, 3, 5, 5, 5, 5, 5, 6, 6, 7, 8])
Mean = array12.mean()
Mean
4.75
Median = np.median(array12)
Median
5.0
# 极差
Ptp = np.ptp(array12)
Ptp
7
# 方差
Var = array12.var()
Var
4.1875
# 标准差
Std = array12.std()
Std
2.0463381929681126
# 下四分位数
Q1 = np.quantile(array12,0.25)
Q1
4.5
# 中位数
Q2 = np.quantile(array12,0.5)
Q2
5.0
# 上四分位数
Q3 = np.quantile(array12,0.75)
Q3
6.0
# 四分位距离
IQR = Q3 - Q1
IQR
1.5
# 最大值索引
array11.argmax()
# 最小值索引
# array11.argmin()
5
# cumulative sum  累计和
array11.cumsum()
array([ 93, 136, 197, 255, 272, 367, 407], dtype=int32)
array13 = np.random.randint(60,101,(5,3))
array13
array([[79, 90, 75],
       [67, 72, 90],
       [71, 63, 93],
       [99, 70, 82],
       [81, 79, 85]])
array14 = array13.flatten()
array14
array([79, 90, 75, 67, 72, 90, 71, 63, 93, 99, 70, 82, 81, 79, 85])
# 返回排序结果,原数组无影响
np.sort(array14)
array([63, 67, 70, 71, 72, 75, 79, 79, 81, 82, 85, 90, 90, 93, 99])
# 就地排序,修改原数组
array14.sort()
array14
array([63, 67, 70, 71, 72, 75, 79, 79, 81, 82, 85, 90, 90, 93, 99])
# 交换0,1轴
array13.swapaxes(0,1)
array([[79, 67, 71, 99, 81],
       [90, 72, 63, 70, 79],
       [75, 90, 93, 82, 85]])
# 转置
# array13.transpose()
array13.T
array([[79, 67, 71, 99, 81],
       [90, 72, 63, 70, 79],
       [75, 90, 93, 82, 85]])

数组与标量的运算

array15 = np.arange(1,10)
array16 = np.array([1,1,1,2,2,2,3,3,3])
# 数组相加   ---   对应位置元素相加
array15 + array16
array([ 2,  3,  4,  6,  7,  8, 10, 11, 12])
# 数组乘幂   ---   对应位置元素乘幂
array15 ** array16
array([  1,   2,   3,  16,  25,  36, 343, 512, 729], dtype=int32)
广播机制
  1. 两个数组的后缘维度相同;
  2. 两个数组的后缘维度不同,但其中一方为1。

后缘维度:数组的shape属性,从后往前看的部分

# 矩阵乘法
matrix1 = np.array([[1,0,2],[-1,3,1]])
matrix2 = np.array([[3,1],[2,1],[1,3]])
matrix1 @ matrix2
# 函数
# np.matmul(matrix1,matrix2)
array([[5, 7],
       [4, 5]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值