课程:【莫烦Python】Numpy & Pandas (数据处理教程)_哔哩哔哩_bilibili
黑马程序员课程笔记:Numpy | 走在小路上
Numpy简介
Numpy (Numerical Python) 是一个开源的 Python 科学计算库,用于快速处理任意维度的数组。
Numpy 使用 ndarray 对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
ndarray
ndarray是NumPy 提供的一个 N 维数组类型 ,它描述了相同类型的"items"的集合
- 存储风格
- ndarray - 相同类型 - 通用性不强
- list - 不同类型 - 通用性很强
- 并行化运算
- ndarray 支持向量化运算
- 底层语言:Numpy 底层使用 C 语言编写,内部解除了 GIL(全局解释器锁),其对数组的操作速度不受 Python 解释器的限制,效率远高于纯 Python 代码
创建array
# 数组的维度
print('number of dim:',score.ndim)
# 数组的维度
print('shape:',score.shape)
# 一共有多少元素
print('size:',score.size)
# 定义元素类型(默认为电脑内置类型,也可以自定义64位更精确但占空间大)
import numpy as np
a = np.array([1, 23, 4], dtype=int)
print(a.dtype)
#小数形式
import numpy as np
a = np.array([1, 23, 4], dtype=float)
print(a.dtype)
#定义一个多行矩阵,全部矩阵外要用括号括起来
a = np.array([[1,23,4],
[2,13,5]])
print(a)
#定义一个全部为0的矩阵,shape为(3,4)三行四列
a = np.zeros((3,4))
print(a)
#生成10,20之间step为2的随机数
**a=np.arange(10,20,2)
print(a)
#结果:[10 12 14 16 18]**
#np.arange([start, ]stop, [step, ]dtype=None)
参数解释:
start:起点值;可忽略不写,默认从0开始
stop:终点值;生成的元素不包括结束值
step:步长;可忽略不写,默认步长为1
dtype:默认为None,设置显示元素的数据类型
**#生成一个由0-12随机数组成的矩阵reshape定义其为3行4列
a=np.arange(12).reshape((3,4))
print (a)
# 生成返回5个间隔类均匀分布的数值序列
a=np.linspace(1,10,5)
print(a)
#np.linspace 将范围 [1, 10] 均匀分为 6 个数。
#.reshape((2, 3)) 将这些数按行填充到 2x3 的矩阵中。
import numpy as np
a = np.linspace(1, 10, 6).reshape((2, 3))
print(a)**
矩阵的基础运算
#np.arange(4):生成0-4,step为1的矩阵;矩阵的减法
a=np.array([10,20,30,40])
b=np.arange(4)
c=a-b
print(c)
#次方运算**2:平方**3立方
b=np.arange(4)
c=b**3
print(c)
#作比较
b=np.arange(4)
print(b)
print(b<3)
输出结果:[0 1 2 3]
[ True True True False]
#计算三角函数
b=np.arange(4)
c=np.sin(b)
print(c)
#矩阵以纯数字方式相乘和以矩阵变换的形式相乘
a=np.array([[10,20],
[30,40]])
b=np.arange(4).reshape((2,2))
c=a*b
c_dot=np.dot(a,b)
c_dot_2=a.dot(b)
print(c)
print(c_dot)
print(c_dot_2)
输出结果:
纯数字相乘
[[ 0 20]
[ 60 120]]
矩阵变换相乘
[[ 40 70]
[ 80 150]]
矩阵变换相乘
[[ 40 70]
[ 80 150]]
来源:Python数据科学手册p53
numpy中的axis
来源:Python数据科学手册p52-53
【Numpy】对于 Numpy 中 Axis 的理解_numpy axis-优快云博客
1.对于二维数组有两个轴:axis = 0 和 axis = 1。axis = 0 表示横轴,确切地说是行变换的轴。相应的 axis = 1 表示的是列变化的轴。
2.对于多维数组:
以a=np.arange(24).reshape((2,3,4))为例说明:
np.arange(24):- 生成一个包含从 0 到 23 的一维数组:
[0, 1, 2, ..., 23]。 - 默认步长为 1。
- 生成一个包含从 0 到 23 的一维数组:
.reshape((2, 3, 4)):- 将一维数组重新排列为三维数组,形状为
(2, 3, 4)。 - 第一维包含 2 个子数组,每个子数组是一个 3 行 4 列的二维数组。
- 将一维数组重新排列为三维数组,形状为
- 赋值给变量
a:a是一个三维 NumPy 数组。
🌟axis=0;对应红色
axis=1;对应绿色
axis=2;对应蓝色

import numpy as np
a = np.random.random((2,3,4))#随机生成0-1之间的浮点数;如果需要生成随机整数,可以使用 np.random.randint
print(a)
b=np.sum(a,axis=0)
c=np.sum(a,axis=1)
d=np.sum(a,axis=2)
print(b)
print(c)
print(d)
A=np.arange(2,14).reshape((3,4))
min_A=np.argmin(A)#矩阵中最小值的位置
max_A=np.argmax(A)#矩阵中最大值的位置
mean=np.average(A)#求平均数
median=np.median(A)#求中位数
B=np.cumsum(A)#计算累加
C=np.diff(A)#计算累差
print(A)
print(min_A)
print(max_A)
print(mean)
print(median)
print(B)
print(C)
import numpy as np
a=np.arange(14,2,-1).reshape(3,4)
a_1=np.sort(a)#对a矩阵中的每行元素大小进行排序
print(a)
print(a_1)
a=np.arange(14,2,-1).reshape(3,4)
a_1=np.transpose(a)#使矩阵行与列调换
a_2=a.T#与上一行效果相同
print(a)
print(a_1)
print(a_2)
np.clip(a, a_min, a_max, out=None)
# 限制数组元素范围 的函数。它会将数组中的元素限制在指定的最小值和最大值之间,
#低于最小值的部分会替换为最小值,高于最大值的部分会替换为最大值。
a=np.arange(14,2,-1).reshape(3,4)
a_1=np.clip(a,4,10)
mean=np.average(a,axis=0)#对行变换轴元素计算平均值(即计算每列的平均值)
print(a)
print(a_1)
numpy的索引

来源:Python数据科学手册p38
a=np.arange(3,15).reshape(3,4)
print(a)
print(a[1])#索引第二行
print(a[1][1])#索引第二行第二个元素
print(a[1,1])#索引第二行第二个元素
print(a[2:])#索引第三行所有元素(切片)

来源:Python数据科学手册p38
#for: 表示开始一个循环。
#row: 临时变量,用于存储当前循环中从 a 中取出的元素。
a=np.arange(3,15).reshape(3,4)
for row in a:
print(row)
a=np.arange(3,15).reshape(3,4)
for row in a:
for item in row:
print(item, end=" ")
#历遍数组A的行和列
A=np.arange(3,15).reshape(3,4)
for row in A:#遍历 A中的每一行,打印出来的结果是数组 A 的每一行。
print(row)
for column in A.T:#遍历 A.T 的每一行,输出的结果是原数组 A 的每一列。
print(column)
A=np.arange(3,15).reshape(3,4)
print(A.flatten())#返回一个展平后的 1D 数组,将 3x4 的矩阵转换为一个单行数组
for item in A.flat:#通过 flat 迭代器逐个访问数组 A 的元素,并将每个元素打印出来。
print(item)
数组的合并和分割
Python数据科学手册p58
#np.vstack((A, B)):vstack 函数将传入的多个数组沿着垂直轴(即按行方向)堆叠。
#这里是将 A 和 B 作为行堆叠在一起,形成一个二维数组。
#np.hstack((A,B)): hstack 函数将数组沿水平方向拼接,
#也就是说,两个数组会按列的顺序并排放在一起,形成一个新的数组。
A=np.array([1,2,3])
B=np.array([4,5,6])
print(np.vstack((A,B)))
print(np.hstack((A,B)))
A=np.array([1,2,3])
C=A[np.newaxis,:]#np.newaxis, : 的意思是将原本的一维数组变为一个二维数组,在第一维新增一个维度。
#C 的形状变为 (1, 3),即 1 行 3 列。
D=A[:,np.newaxis]#:, np.newaxis 的意思是在第二维新增一个维度,将原数组转为一个二维数组,每个元素作为一行。
#D 的形状变为 (3, 1),即 3 行 1 列。
print(C)
print(D)
A=np.array([[1,2,3],
[4,5,6]])
B=np.concatenate((A,A))
C=np.concatenate((A,A),axis=1)
print(B)
print(C)
A=np.arange(12).reshape(3,4)
B=np.split(A,2,axis=1)
print(B)
#B = np.split(A, 2, axis=1):
- np.split` 用来将数组分割为指定数量的子数组。
- 参数 `2` 表示将数组分成 2 个子数组。
- 参数 `axis=1` 表示沿列(横向)方向分割。
- `A` 的列数是 4,因此分割后每个子数组将有 2 列。
A=np.arange(12).reshape(3,4)
B=np.array_split(A,3,axis=1)#array_split非平均分割
print(B)

A=np.arange(12).reshape(3,4)
B=np.vsplit(A,3)
C=np.hsplit(A,2)
D=np.hsplit(A,[2,3])#[2,3]为分裂点:即1-2,3,4
print(B)
print(C)
print(D)
创建副本
A=np.array([1,2,3,4])
B=A.copy()
A[0]=5#改变原数组的值,副本不会发生改变
print(A)
print(B)

755

被折叠的 条评论
为什么被折叠?



