Python初学者必学的3个Numpy小技巧

131 阅读2分钟

窍门1。切片和分片作业

这个单行本展示了三个有趣的NumPy功能的威力,以及它们的组合如何以一种干净、高效的方式解决一个小的数据科学问题。

假设,你在一家公司工作,会计要求你分析公司中不同员工的工资数据。你创建了一个容纳相关数据的NumPy数组。每一行给出一个专业人员(数据科学家、产品经理、设计师或软件工程师)的年薪。每一列给出各自的年份(2017、2018、2019)。因此,产生的NumPy数组有四行和三列。

会计师告诉你,还有一些钱,管理层想加强公司最重要的专业人员的力量。你说服会计给你公司的隐藏英雄们更多的钱:数据科学家们。

问题的提出。什 么是更新NumPy数组的最佳方法,以便只有数据科学家的工资增加10%--但只是从你的数据库的第一年开始每隔一年增加一次?

import numpy as np


## Data: salary in ($1000) [2017, 2018, 2019]
dataScientist =     [130, 132, 137]
productManager =    [127, 140, 145]
designer =          [118, 118, 127]
softwareEngineer =  [129, 131, 137]

employees = np.array([dataScientist,
                      productManager,
                      designer,
                      softwareEngineer])


employees[0,::2] = employees[0,::2] * 1.1


## Result
print(employees)

让我们看一下结果。

[[143 132 150]
 [127 140 145]
 [118 118 127]
 [129 131 137]]

突出显示的一行使用了NumPy中的切片和切片赋值这两个概念。在这个例子中,我们使用分片法从NumPy数组employees中获取第一行的其他每一个值。 然后,我们进行一些修改,用切片赋值来更新第一行的其他每个值。这个过程将NumPy数组中第一行的内容替换为最新的工资数据。

技巧二:广播

第二,尽管你可能没有意识到,我们在NumPy中使用了一个强大的概念,叫做 "广播"。

广播的 意思是NumPy自动修复不同形状的NumPy数组的元素明智操作。例如,乘法运算符*在应用于一维或多维NumPy数组时,通常会执行元素明智的乘法运算。

NumPy Broadcasting Visual Guide

广播描述了NumPy在进行算术运算时如何自动将两个不同形状的数组带到一个兼容的形状。一般来说,较小的数组被 "重复 "多次,直到两个数组具有相同的形状。广播是很节省内存的,因为它实际上并没有多次复制较小的数组。

下面是一个最小的例子。

import numpy as np

A = np.array([1, 2, 3])
res = A * 3 # scalar is broadcasted to [3 3 3]
print(res)
# [3 6 9]

在我们的详细指南中阅读更多关于这个强大的NumPy技巧。

NumPy广播 - 一个简单的图解指南

技巧3:自动类型转换

在下面的代码片断中,你会意识到结果的数据类型不是浮点而是整数--即使我们在进行浮点运算。

import numpy as np

## Data: salary in ($1000) [2017, 2018, 2019]
dataScientist =     [130, 132, 137]
productManager =    [127, 140, 145]
designer =          [118, 118, 127]
softwareEngineer =  [129, 131, 137]

employees = np.array([dataScientist,
                      productManager,
                      designer,
                      softwareEngineer])

print(employees.dtype)
# int32

employees[0,::2] = employees[0,::2] * 1.1

print(employees.dtype)
# int32

如果你知道的话,原因很简单:每个NumPy数组都有一个相关的数据类型(你可以使用dtype 属性来访问)。在创建数组时,NumPy意识到该数组只包含整数值。所以该数组被认为是一个整数数组。因此,你对整数数组进行的任何操作都不会改变数据类型。NumPy四舍五入为整数值。

从哪里开始?

为了帮助你从基本的Python水平发展到NumPy专业知识,我写了一本新的NumPy书 "Coffee Break NumPy"。它采用了成熟的良好教学原则,如基于拼图的学习,小抄,和简单的教程。

不要错过数据科学和机器学习的列车。 看看吧!

"咖啡时间NumPy。融入你繁忙生活的数据科学掌握的简单道路"

The post3 Little-Known NumPy Tricks in one line [Python Puzzle]first appeared onFinxter.