python数据分析第三天

这篇博客主要介绍了numpy库的基本使用,包括数组的创建、统计计算(均值、方差)、切片、索引、条件筛选、数组运算(加减乘除、幂运算)、数组拼接与堆叠、数值处理(空值检查、正弦余弦函数)、向量运算(内积、点积、叉积)以及矩阵操作(转置、行列式、逆矩阵)。此外,还涵盖了广播机制、迭代器创建数组、数组的滚动和调整大小等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy 热身练习

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

array1 = np.array([42, 45, 62, 56, 35, 79, 67, 74, 30, 28, 54])
array2 = np.array([65, 36, 123, 25, 45, 32, 26, 78, 57, 51, 34])
array3 = np.array([82, 36, 21, 23, 25, 43, 52, 59, 60, 76, 95])


print('均值', array1.mean())
print('方差', array1.var())
array3[0], array3[1], array3[-2]
array3[[0, 1, -2]]
array3.take([0, 1, -2])
array3[array3 > 50]
array3[(array3 > 50) | (array3 % 2 == 0)]

# 在末尾添加元素
np.append(array3, 1000)
# 在特定位置插入元素
np.insert(array3, 0, 1000)

# 数组与标量运算
array4 = np.array([[1, 1, 1], [2, 3, 4], [5, 5, 6]])
array4
array4 + 5
array4 * 5
array4 / 5
array4 ** 5

# 数组与数组的运算
array5 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array6 = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
array5 + array6
array5 ** array6

"""
当两个数组形状不一致时,如果两个数组的后缘维度(shape属性从后往前看)相同或者其中一个的后缘维度为1,那么这个时候可以通过广播机制让两个数组的形状趋于一致,这种情况是可以进行运算的;如果不能应用广播机制,那么两个数组没有办法进行运算。
"""
array7 = np.array([4, 4, 4])
array7
array5 + array7

# 判断空值
array10 = np.array([1, 2, 3, np.nan, 4, np.nan, np.inf])
# 判断空值
np.isnan(array10)
# 判断无穷大值
np.isinf(array10)

# 正弦和余弦函数
x = np.linspace(-2 * np.pi, 2 * np.pi, 60)
y1, y2 = np.sin(x),np.cos(x)
plt.figure(figsize=(8, 4))
plt.plot(x, y1, color='#0000ff', marker='x')
plt.plot(x, y2, color='coral', marker='o')

# 判断两个数组是否相等
a = np.array([0.1, 0.2, 0.3])
b = np.array([0.1, 0.2, 0.3000001])
a == b
np.all(a == b) # false
# 判断每个元素是否在可容忍误差范围内相近
np.allclose(a, b)

array11 = np.array([1, 4, 9])
array12 = np.array([2, 3, 5])
# 比较两个数组对应的元素取大的
np.maximum(array11, array12)
# 比较两个数组对应的元素取小的
np.minimum(array11, array12)


v1 = np.array([3, 1])
v2 = np.array([-1, 2])
v1 + v2
# 通过内积计算向量夹角的余弦值
np.inner(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
# 内积
np.inner(v1, v2)
# 点积(欧几里得空间的内积)
np.dot(v1, v2)
# 叉积(叉积的绝对值是以向量为邻边构成的平行四边形的面积)
np.cross(v1, v2)

# 常用函数

array13 = np.array([12, 13, 12, 15, 20, 20, 17])
array13

# 去重
np.unique(array13)

array5
array6
# 堆叠和拼接
np.hstack((array5, array6))
np.vstack((array5, array6))
np.stack((array5, array6), axis=0)
np.stack((array5, array6), axis=1)
np.concatenate((array5, array6))

# 获取非零元素的索引
np.argwhere(array5)

array14 = np.arange(1, 10)
array14

# 抽取元素
np.extract(array14 % 3 == 0, array14)
np.select([array14 < 3, array14 > 5], [array14, array14 ** 2])

np.where(array14 < 5, array14, array14 * 10)

# 翻转 可以指定axis轴翻转
np.flip(array5)

# 定义斐波那契数列的迭代器
def fib(counts):
    a, b = 0, 1
    for _ in range(counts):
        a, b = b, a + b
        yield a
        

iter_obj = fib(20)
iter_obj

# 通过迭代器创建数组
array15 = np.fromiter(iter_obj, dtype=np.int64)
array15

# 通过重复指定的元素创建数组
array16 = np.repeat([3, 4], 10)
array16

"""
array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4])
"""

array17 = np.repeat([[3, 4]], 3, axis=0)
array17

"""
array([[3, 4],
       [3, 4],
       [3, 4]])
"""

array18 = np.repeat([[3, 4]], [2, 3], axis=1)
array18

"""
array([[3, 3, 4, 4, 4]])
"""

# 滚动

np.roll(array14, 3)

"""
array([7, 8, 9, 1, 2, 3, 4, 5, 6])
"""

np.roll(array14, -3)
"""
array([4, 5, 6, 7, 8, 9, 1, 2, 3])
"""

# 调整大小  # 不够的元素会从前面取一个来补齐
array19 = np.random.randint(60, 101, 15)
array20 = np.resize(array19, (4, 4))
array20

# 替换(原地替换,不返回新的数组对象)
np.place(array20, array20 < 80, 59)


# 创建矩阵对象
m1 = np.matrix(array5)
m1

# 矩阵的转置
m1.T

# 计算行列式的值
np.linalg.det(m1)

# 获取逆矩阵
m1.I

m2 = np.matrix('1 1 1; 2 2 2; 3 3 3')
m2

# 求矩阵的行列式值
np.linalg.det(m2)

# 获取矩阵对应的二维数组
m2.A

# 获取矩阵对应的一维数组
m2.A1

# 用二维数组表示矩阵
m3 = np.array([[1, 0, 2], [-1, 3, 1]])
m4 = np.array([[3, 1], [2, 1], [1, 0]])

# 矩阵的乘法运算
m5 = m3 @ m4

"""
array([[5, 1],
       [4, 2]])
"""

# 求逆矩阵
np.linalg.inv(m5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

azured_xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值