02-numpy计算


前言

NumPy广播是一种强大的机制,允许NumPy在执行算术运算时处理不同形状的数组。当进行数组运算如加、减、乘、除时,通常这些操作是在数组的对应元素上进行的。如果两个数组形状完全相同,那么这些运算就会无缝执行。但是,当涉及到形状不同的数组时,NumPy的广播规则就会发挥作用。

NumPy 广播是 NumPy 中的一个重要概念,它允许两个形状不同的数组进行运算。两个数组的后缘维度相同,或者在其中一方的维度为1。广播在缺失或者长度为1的维度上补充。


一、广播的规则

NumPy在执行广播时遵循一组特定的规则:

  1. 如果两个数组的维数不同,较小维度数组的形状将在最左边补1。

  2. 如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另外一个数组的形状。

  3. 如果在任何一个维度上,两个数组的大小既不相等也没有一个是1,那么会引发异常,因为它们被认为是不兼容的。

二、使用步骤

1.索引及切片

对象[i, j]

对象[行的开始索引:行的结束索引,列的开始索引:列的结束索引]

第一个值索引的是第几行,第二个值索引的是第几列

代码如下(示例):

ar4 = np.arange(5,20)
print(ar4)
# 取9
print(ar4[4])
# 取9到12
print(ar4[4:8])
# 取所有的偶数
print(ar4[1::2])
# 第一行
print(ar5[0]) # 默认的是行
# 取5
print(ar5[1][1])
print(ar5[1,1])  # 逗号前代表行,逗号后代表列
# 取5 6 9 10
print(ar5[1:3,1:3])  # 结束索引不包括
print(ar5[1:3]) 

2.筛选where

# np.where(条件,条件为真输出的结果,条件为假输出的结果)
arr6 = np.random.randn(4,4)
np.where(arr6>0,3,-3)

arr7 = np.array([2,5,7,9,10])
np.where(arr7>7)  # 返回的是满足条件的下标

3.查

any:检查数组中至少有一个True

all:检查是否每个值都是True

4.排序

(1)sort:

import numpy as np

a = np.array([3, 4, 2, 0, 1])
print(a)

a_sort = np.sort(a)
print(a_sort)
# [0 1 2 3 4]
print(a)
# [3 4 2 0 1]

如果要降序使用切片[::-1] 

np.sort(a)[::-1] 

(2)argsort

import numpy as np
a = np.array([5, 4, 2, 0, 1, 7, 9])
#返回的是下标
a_sort = np.argsort(a)
#下标取值返回排序后的数组      
print(a[a_sort])

5.去重unique

6.包含isin-返回布尔数组

import numpy as np
ar1 = np.array([5, 4, 2, 0, 1, 7, 9])
ar2 = [0,2]
print(np.isin(ar1,[2, 3]))
#测试每一个元素是否存在与第二个数组中,返回布尔值
mask = np.isin(ar1,ar2)
print(mask)

#展示符合条件的第一个数组中的元素
tong = ar1[mask]
print(tong)
#展示不符合条件的第一个数组中的元素
tong = ar1[~mask]
print(tong)

三、axis参数

axis=0代表行

axis=1代表列

四、科学计算

1.常用统计函数

求和:sum

平均水平、一般水准:average

平均数、均值:mean

乘积:prod

累积和:cumsum

累积乘积:cumprod

中位数:median

方差:var

标准差:std

百分位数:percentile

分位数:quantile

exam_scores = np.array([85, 78, 92, 88, 70, 95, 80, 85, 90, 78, 84, 88, 92, 86, 75])
# 平均数
mean_score= np.mean(exam_scores)
print(mean_score)
print(np.median(exam_scores))
# 标准差
print(np.std(exam_scores))
# 统计高于平均分的人数
print(np.sum(exam_scores>mean_score))
# 找最高分和最低分
print(np.max(exam_scores))
print(np.min(exam_scores))

2.随机数:random

seed:设置随机数生成器的种子的函数

rand:生成 [0, 1) 区间的均匀分布随机数

randint:生成给定范围内的随机整数

random:生成 [0, 1) 区间的均匀分布随机数,可以指定输出数组的形状

b.astype(int)   -astype用来改变数据类型

randn:生成标准正态分布(高斯分布)的随机数数组

choice:从给定的一维数组中随机选择元素

shuffle:就地打乱数组的顺序

permutation:返回一个数组的随机排列


总结

广播机制在数据分析和科学计算中非常有用,它允许你以一种高效和简洁的方式对不同形状的数据集进行运算。例如,在图像处理中,你可能需要将一个三维的RGB图像数组与一个一维的颜色调整数组相乘,广播使得这种类型的操作变得直接而简单。

总的来说,NumPy的广播机制是一个强大的工具,它增强了数组运算的灵活性,同时保持了代码的简洁性和性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

william_liu1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值