数组

[In ]:
from datascience import *
path_data = '../../../assets/data/'

虽然 Python 中有多种集合类型,但本课程中我们主要使用数组。我们已经看到 make_array 函数可以用来创建数字数组。

数组也可以包含字符串或其他类型的值,但单个数组只能包含单一类型的数据。(将不同类型的数据混在一起通常也没有意义。)例如:

[In ]:
english_parts_of_speech = make_array("noun", "pronoun", "verb", "adverb", "adjective", "conjunction", "preposition", "interjection")
english_parts_of_speech
array(['noun', 'pronoun', 'verb', 'adverb', 'adjective', 'conjunction',
       'preposition', 'interjection'], dtype='<U12')

回到温度数据,我们创建了 1850 年、1900 年、1950 年和 2000 年前后几十年间的日均高温数组。

[In ]:
baseline_high = 14.48
highs = make_array(baseline_high - 0.880, 
                   baseline_high - 0.093,
                   baseline_high + 0.105, 
                   baseline_high + 0.684)
highs
array([13.6  , 14.387, 14.585, 15.164])

数组可以在算术表达式中使用,对其内容进行计算。当数组与单个数字组合时,该数字会与数组的每个元素进行运算。因此,我们可以通过编写熟悉的转换公式,将所有温度转换为华氏度。

[In ]:
(9/5) * highs + 32
array([56.48  , 57.8966, 58.253 , 59.2952])

数组运算的可视化表示。(9/5) 乘以数组 highs (13.6, 14.387, 14.585, 15.164) 再加 32 等于:结果数组的第一个位置是 (9/5) 乘以 13.6 再加 32,第二个位置是 (9/5) 乘以 14.387 再加 32,依此类推。图像右侧最终显示一个包含最终答案的数组 (56.48, 57.8966, 58.253, 59.2952)。

数组还有方法,这些方法是对数组值进行操作的函数。一组数字的 mean 是其平均值:总和除以长度。下面示例中的每对括号都是调用表达式的一部分;它调用一个无参数函数,对名为 highs 的数组执行计算。

[In ]:
highs.size
4
[In ]:
highs.sum()
57.736000000000004
[In ]:
highs.mean()
14.434000000000001

数组上的函数

numpy 包(在程序中缩写为 np)为 Python 程序员提供了便捷而强大的函数,用于创建和操作数组。

[In ]:
import numpy as np

例如,diff 函数计算数组中每对相邻元素之间的差值。diff 的第一个元素是第二个元素减去第一个元素。

[In ]:
np.diff(highs)
array([0.787, 0.198, 0.579])

完整 Numpy 参考文档 详尽列出了这些函数,但只有一小部分常用于数据处理应用。这些函数被分组到 np 内的不同子包中。学习这些词汇是学习 Python 语言的重要组成部分,因此在完成示例和问题时,请经常参考此列表。

不过,你不需要记住这些。请将其作为参考使用。

以下每个函数都以数组为参数并返回单个值。

函数 描述
np.prod 将所有元素相乘
np.sum 将所有元素相加
np.all 测试是否所有元素都为真值(非零数字为真)
np.any 测试是否有元素为真值(非零数字为真)
np.count_nonzero 计算非零元素的数量

以下每个函数都以数组为参数并返回一个值数组。

函数 描述
np.diff 相邻元素之间的差值
np.round 将每个数字四舍五入到最接近的整数
np.cumprod 累积乘积:对每个元素,乘以之前所有元素
np.cumsum 累积和:对每个元素,加上之前所有元素
np.exp 对每个元素取指数