Python之【Numpy总结】

文章目录

  • [NumPy 笔记](#NumPy 笔记)
    • [1. 介绍](#1. 介绍)
    • [2. 安装](#2. 安装)
    • [3. 基本操作](#3. 基本操作)
    • [4. 实际应用示例](#4. 实际应用示例)
    • [5. 高级操作](#5. 高级操作)
    • [6. 总结](#6. 总结)

NumPy 笔记

1. 介绍

NumPy(Numerical Python)是一个用于科学计算的基础库。它提供了高性能的多维数组对象,以及对数组进行操作的函数。NumPy 常被用于数据分析、机器学习、数值计算等领域。

2. 安装

可以使用以下命令安装NumPy:

python 复制代码
pip install numpy

3. 基本操作

3.1 导入NumPy

python 复制代码
import numpy as np

3.2 创建数组

  • 从列表创建数组:
python 复制代码
a = np.array([1, 2, 3, 4, 5])
print(a)
  • 创建多维数组:
python 复制代码
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
  • 创建全零数组:
python 复制代码
zeros = np.zeros((2, 3))  #np.zeros(数组元素个数, dtype='类型')
print(zeros)
  • 创建全一数组:
python 复制代码
ones = np.ones((3, 3)) #np.ones(数组元素个数, dtype='类型')
print(ones)
  • 创建指定间隔的数组:
python 复制代码
arr = np.arange(10)  
print(arr)  # 输出: [0 1 2 3 4 5 6 7 8 9]

#指定起始值和终止值
arr = np.arange(1, 10)   #np.arange(起始值(0),终止值,步长(1))
print(arr)  # 输出: [1 2 3 4 5 6 7 8 9]

#指定步长
arr = np.arange(1, 10, 2)
print(arr)  # 输出: [1 3 5 7 9]

#指定数据类型
arr = np.arange(1, 10, 2, dtype=float)
print(arr)  # 输出: [1. 3. 5. 7. 9.]

与 np.linspace 的对比

np.linspace 根据指定的元素数量生成均匀间隔的数组:

python 复制代码
arr = np.linspace(0, 5, 5)
print(arr)  # 输出: [0.  1.25  2.5  3.75  5. ]
  • 创建随机数组:
python 复制代码
random = np.random.random((2, 2))
print(random)

3.3 数组属性

  • 数组形状:
python 复制代码
print(a.shape)  # (5,)
print(b.shape)  # (2, 3)
  • 数组数据类型:np.ndarray.dtype
python 复制代码
print(a.dtype)  # int64
print(b.dtype)  # int64
python 复制代码
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary), ary, ary.dtype)
#转换ary元素的类型
b = ary.astype(float)
print(type(b), b, b.dtype)
#转换ary元素的类型
c = ary.astype(str)
print(type(c), c, c.dtype)
  • 数组元素个数:np.ndarray.size
python 复制代码
print(a.size)  # 5
print(b.size)  # 6
python 复制代码
import numpy as np
ary = np.array([
    [1,2,3,4],
    [5,6,7,8]
])
#观察维度,size,len的区别
print(ary.shape, ary.size, len(ary))
  • 数组维度:np.ndarray.shape
python 复制代码
print(a.ndim)  # 1
print(b.ndim)  # 2
python 复制代码
import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary), ary, ary.shape)
#二维数组
ary = np.array([
    [1,2,3,4],
    [5,6,7,8]
])
print(type(ary), ary, ary.shape)

3.4 数组操作

数组切片和索引:
python 复制代码
print(a[0])  # 1
print(b[1, 2])  # 6
print(a[1:4])  # [2 3 4]

ndarray数组索引操作

python 复制代码
# 数组对象切片的参数设置与列表切面参数类似
#  步长+:默认切从首到尾
#  步长-:默认切从尾到首
数组对象[起始位置:终止位置:步长, ...]
# 默认位置步长:1
python 复制代码
import numpy as np
a = np.arange(1, 10)
print(a)  # 1 2 3 4 5 6 7 8 9
print(a[:3])  # 1 2 3
print(a[3:6])   # 4 5 6
print(a[6:])  # 7 8 9
print(a[::-1])  # 9 8 7 6 5 4 3 2 1
print(a[:-4:-1])  # 9 8 7
print(a[-4:-7:-1])  # 6 5 4
print(a[-7::-1])  # 3 2 1
print(a[::])  # 1 2 3 4 5 6 7 8 9
print(a[:])  # 1 2 3 4 5 6 7 8 9
print(a[::3])  # 1 4 7
print(a[1::3])  # 2 5 8
print(a[2::3])  # 3 6 9

多维数组的切片操作

python 复制代码
import numpy as np
a = np.arange(1, 28)
a.resize(3,3,3)
print(a)
#切出1页 
print(a[1, :, :])		
#切出所有页的1行
print(a[:, 1, :])		
#切出0页的1行1列
print(a[0, :, 1])		

ndarray数组的掩码操作

python 复制代码
import numpy as np
a = np.arange(1, 10)
mask = [True, False,True, False,True, False,True, False,True]
print(a[mask])
数组形状变换:
python 复制代码
c = b.reshape(3, 2)
print(c)

视图变维(数据共享): reshape() 与 ravel()

python 复制代码
import numpy as np
a = np.arange(1, 9)
print(a)		# [1 2 3 4 5 6 7 8]
b = a.reshape(2, 4)	#视图变维  : 变为2行4列的二维数组
print(b)
c = b.reshape(2, 2, 2) #视图变维    变为2页2行2列的三维数组
print(c)
d = c.ravel()	#视图变维	变为1维数组
print(d)

**复制变维(数据独立):**flatten()

python 复制代码
e = c.flatten()
print(e)
a += 10
print(a, e, sep='\n')

就地变维:直接改变原数组对象的维度,不返回新数组

python 复制代码
a.shape = (2, 4)
print(a)
a.resize(2, 2, 2)
print(a)
数组拼接:
python 复制代码
d = np.concatenate((a, a))
print(d)
数组分割:
python 复制代码
e = np.split(d, 3)
print(e)
多维数组的组合与拆分:

垂直方向操作:

python 复制代码
import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
# 垂直方向完成拆分操作,生成两个数组
d, e = np.vsplit(c, 2)

水平方向操作:

python 复制代码
import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 水平方向完成组合操作,生成新数组 
c = np.hstack((a, b))
# 水平方向完成拆分操作,生成两个数组
d, e = np.hsplit(c, 2)

深度方向操作:(3维)

python 复制代码
import numpy as np
a = np.arange(1, 7).reshape(2, 3)
b = np.arange(7, 13).reshape(2, 3)
# 深度方向(3维)完成组合操作,生成新数组
i = np.dstack((a, b))
# 深度方向(3维)完成拆分操作,生成两个数组
k, l = np.dsplit(i, 2)

长度不等的数组组合:

python 复制代码
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4])
# 填充b数组使其长度与a相同
b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1)
print(b)
# 垂直方向完成组合操作,生成新数组
c = np.vstack((a, b))
print(c)

多维数组组合与拆分的相关函数:

python 复制代码
# 通过axis作为关键字参数指定组合的方向,取值如下:
# 若待组合的数组都是二维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
# 若待组合的数组都是三维数组:
#	0: 垂直方向组合
#	1: 水平方向组合
#	2: 深度方向组合
np.concatenate((a, b), axis=0)
# 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上
np.split(c, 2, axis=0)

简单的一维数组组合方案

python 复制代码
a = np.arange(1,9)		#[1, 2, 3, 4, 5, 6, 7, 8]
b = np.arange(9,17)		#[9,10,11,12,13,14,15,16]
#把两个数组摞在一起成两行
c = np.row_stack((a, b))
print(c)
#把两个数组组合在一起成两列
d = np.column_stack((a, b))
print(d)

3.5 数学运算

  • 数组元素加减乘除:
python 复制代码
f = np.array([10, 20, 30, 40])
g = np.array([1, 2, 3, 4])
print(f + g)  # [11 22 33 44]
print(f - g)  # [ 9 18 27 36]
print(f * g)  # [ 10  40  90 160]
print(f / g)  # [10. 10. 10. 10.]
  • 数组求和、平均值等:
python 复制代码
print(f.sum())  # 100
print(f.mean())  # 25.0
print(f.min())  # 10
print(f.max())  # 40
  • 矩阵运算:
python 复制代码
h = np.array([[1, 2], [3, 4]])
i = np.array([[5, 6], [7, 8]])
print(np.dot(h, i))  # 矩阵乘法

3.6 广播

NumPy 允许不同形状的数组进行算术运算,这个功能称为广播。

python 复制代码
j = np.array([1, 2, 3])
k = np.array([[0], [1], [2]])
print(j + k)

3.7 ndarray对象属性操作详解

Numpy的内部基本数据类型

类型名 类型表示符
布尔型 bool_
有符号整数型 int8(-128~127) / int16 / int32 / int64
无符号整数型 uint8(0~255) / uint16 / uint32 / uint64
浮点型 float16 / float32 / float64
复数型 complex64 / complex128
字串型 str_,每个字符用32位Unicode编码表示
日期类型 datetime64

自定义复合类型

python 复制代码
# 自定义复合类型
import numpy as np

data=[
	('zs', [90, 80, 85], 15),
	('ls', [92, 81, 83], 16),
	('ww', [95, 85, 95], 15)
]
#第一种设置dtype的方式
a = np.array(data, dtype='U3, 3int32, int32')
print(a)
print(a[0]['f0'], ":", a[1]['f1'])
print("=====================================")
#第二种设置dtype的方式
b = np.array(data, dtype=[('name', 'str_', 2),
                    ('scores', 'int32', 3),
                    ('age', 'int32', 1)])
print(b[0]['name'], ":", b[0]['scores'])
print("=====================================")

#第三种设置dtype的方式
c = np.array(data, dtype={'names': ['name', 'scores', 'ages'],
                    'formats': ['U3', '3int32', 'int32']})
print(c[0]['name'], ":", c[0]['scores'], ":", c.itemsize)
print("=====================================")

#第四种设置dtype的方式  
d = np.array(data, dtype={'name': ('U3', 0),
                    'scores': ('3int32', 16),
                    'age': ('int32', 28)})
print(d[0]['names'], d[0]['scores'], d.itemsize)

print("=====================================")

#测试日期类型数组
f = np.array(['2011', '2012-01-01', '2013-01-01 01:01:01','2011-02-01'])
f = f.astype('M8[D]')
f = f.astype('i4')
print(f[3]-f[0])

f.astype('bool')

类型字符码

类型 字符码
np.bool_ ?
np.int8/16/32/64 i1 / i2 / i4 / i8
np.uint8/16/32/64 u1 / u2 / u4 / u8
np.float/16/32/64 f2 / f4 / f8
np.complex64/128 c8 / c16
np.str_ U
np.datetime64 M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s]

4. 实际应用示例

  • 计算每个学生的平均成绩:
python 复制代码
scores = np.array([[85, 90, 78], [92, 88, 84], [89, 76, 91]])
avg_scores = scores.mean(axis=1)
print(avg_scores)
  • 图像处理中的应用:
python 复制代码
import matplotlib.pyplot as plt
img = np.random.random((100, 100))
plt.imshow(img, cmap='gray')
plt.show()

5. 高级操作

  • 条件筛选:
python 复制代码
l = np.array([1, 2, 3, 4, 5])
print(l[l > 2])  # [3 4 5]
  • 排序:
python 复制代码
m = np.array([3, 1, 2, 5, 4])
print(np.sort(m))  # [1 2 3 4 5]
  • 统计函数:
python 复制代码
print(np.median(m))  # 3.0
print(np.std(m))  # 标准差

6. 总结

NumPy 是一个功能强大且灵活的库,适用于各种科学计算任务。通过掌握其基本和高级操作,可以极大地提高数据处理和分析的效率。

相关推荐
宁波阿成5 分钟前
基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)大题思路
开发语言·javascript·钉钉
喜欢猪猪6 分钟前
两个线程之间是如何通信的呢?
java·开发语言
CoderIsArt9 分钟前
Python:一个挑选黑色棋盘的程序
python·计算机视觉
小白在路上~15 分钟前
51单片机嵌入式开发:STC89C52操作GPIO口LED灯
c语言·开发语言·单片机·嵌入式硬件·51单片机·dsp开发
NightHacker21 分钟前
什么是AOP思想?
java·开发语言
天外天-亮26 分钟前
ThreeJS-3D教学十四:ShaderMaterial(length、fract、step)
开发语言·javascript·3d
sagima_sdu27 分钟前
Win11 Python3.10 安装pytorch3d
人工智能·pytorch·python
虫小宝28 分钟前
高可用电商返利APP架构设计与实现分享
java·开发语言
乐吾乐科技30 分钟前
【国产开源可视化引擎Meta2d.js】快速上手
开发语言·前端·javascript·开源·编辑器·数据可视化·大屏端
WHAT81631 分钟前
【CUDA】 由GPGPU控制核心架构考虑CUDA编程中线程块的分配
开发语言·c++·人工智能·架构