Python——Numpy(广播机制)

45 阅读2分钟

介绍

  • NumPy(Numerical Python)是 Python 进行科学计算的一个扩展库

  • NumPy 数组和 Python 列表的主要区别:

  1. 数组会对元素的数据类型做统一,而列表不会。
  2. 数组创建后具有固定大小,而列表由于内存自动管理,可动态调整。

创建数组

np.array(object)

  • 用object创建一个数组对象并返回(ndarray实例对象)

观察下面的代码明确:1.数组与列表转换前后的区别;2.观察不同维度的数组的整体形状(这里会涉及到线性代数中,矩阵以及多维度的概念)

import numpy as np

lst = [6, 7, 1, 0, 9, 8]
arr = np.array(lst)
print(lst)
print(arr)
print(arr.shape)

lst = [[6, 7, 1], [0, 9, 8]]
arr = np.array(lst)
print(lst)
print(arr)
print(arr.shape)

lst = [[[6, 7], [1, 0], [9, 8]]]
arr = np.array(lst)
print(lst)
print(arr)
print(arr.shape)

np.arange([start,] stop[, step])

  • 返回给定区间内的均匀间隔值构成的数组
import numpy as np

print(np.arange(3)) #[0 1 2]
print(np.arange(3, 7))  #[3 4 5 6]
print(np.arange(3, 7, 0.5))  #[3.  3.5 4.  4.5 5.  5.5 6.  6.5]  这里用到了特性:数组会对元素的数据类型做统一

np.linspace(start, stop, num=50, dtype=None)

  • 把给定区间分成 num 个均匀间隔的样本,构成数组并返回
  • dtype:默认自动推断数据类型

注意这里的num是默认为50的

import numpy as np

print(np.linspace(1, 50))   
print(np.linspace(1, 10, num=10))
print(np.linspace(1, 10, num=10, dtype=np.int32))

广播机制

  • 后缘维度相同
  • 后缘维度不同的维度有1,可以广播
import numpy as np

# 案例 1:后缘维度相同(均为3)
A = np.ones((4, 3))  # 形状 (4, 3)
B = np.ones((3,))    # 形状 (3,)
print(A + B)  # 成功:B被广播为(1,3) → (4,3)

# 案例 2:其中一个维度为1
C = np.ones((5, 1))  # 形状 (5, 1)
D = np.ones((5, 4))  # 形状 (5, 4)
print(C * D)  # 成功:C被广播为(5,4)