V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanqieipnet
V2EX  ›  推广

什么是 NumPy 的向量化能力?

  •  
  •   fanqieipnet · 2020-12-31 16:14:19 +08:00 · 673 次点击
    这是一个创建于 1235 天前的主题,其中的信息可能已经有所发展或是发生改变。
    什么是 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,不可能不与广播打交道,广播机制必须要理解。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2194 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:25 · PVG 23:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.