什么是 NumPy 的向量化能力?

2020-12-31 16:14:19 +08:00
 fanqieipnet
什么是 NumPy 的向量化能力?今天番茄加速就来讲一下。

  理解 NumPy 的向量化能力,这正是赋予它简洁的重要原因之一。使用 Python 原生 API 会经常写些 for,但是 NumPy 让它变得不再需要,NumPy 一切都是按照向量计算。如下计算小于 3 的元素置 0,否则置为 1:

  # 使用 Python 原生

   a = [10,4,-6,3,5,1]

  # 小于 3 的元素置为 0,不小于 3 的元素置为 1

   b = []

   for i in a:

   b.append(0 if i < 3 else 1)

   print(b)

  使用 NumPy 的 where 方法,语法更加简洁,看不到 for 语句,符合 Python 哲学:

  # 使用 NumPy

   na = np.array(a)

  # 一行代码

   b = np.where(na < 3, 0, 1)

   print(b)

  处理多维数组,NumPy 的索引和切片更强大,如下 na < 3 得到布尔索引,一切都按照向量化操作:

   na = np.array([10,4,-6,3,5,1])

   na[na < 3]

  # 结果如下:

  # array([-6, 1])

  # 创建二维数组

   np.random.randint(1,10,size=(3,4))

   c2 = np.random.randint(1,10,size=(3,4))

   c2

   array([[3, 2, 9, 9],

  [9, 5, 2, 4],

  [8, 1, 2, 4]])

  # 更强大简洁的切片功能:

   c2[:2,1:3]

   array([[2, 9],

  [5, 2]])

  学习 NumPy,不可能不与广播打交道,广播机制必须要理解。
677 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/740681

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX