NumPy能力大评估:这里有70道测试题

百家 作者:机器之心 2018-03-02 07:28:41

选自Machine Learning Plus

作者:Selva Prabhakaran

机器之心编译

参与:路雪、刘晓坤


本 NumPy 测试题旨在为大家提供参考,让大家可以使用 NumPy 的更多功能。问题共分为四个等级,L1 最简单,难度依次增加。机器之心对该测试题进行了编译介绍,希望能对大家有所帮助。每个问题之后附有代码答案,参见原文。


原文链接:https://www.machinelearningplus.com/101-numpy-exercises-python/


如果你想先回顾一下 NumPy 的知识,推荐阅读:


  • NumPy 基础:https://www.machinelearningplus.com/numpy-tutorial-part1-array-python-examples

  • NumPy 高级教程:https://www.machinelearningplus.com/numpy-tutorial-python-part2


1. 将 NumPy 导入为 np,并查看版本


难度:L1

问题:将 NumPy 导入为 np,并输出版本号。


2. 如何创建 1 维数组?


难度:L1

问题:创建数字从 0 到 9 的 1 维数组。


期望输出:


#> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


3. 如何创建 boolean 数组?


难度:L1

问题:创建所有 True 的 3×3 NumPy 数组。


4. 如何从 1 维数组中提取满足给定条件的项?


难度:L1

问题:从 arr 中提取所有奇数。


输入:


arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])`


期望输出:


#> array([1, 3, 5, 7, 9])


5. 如何将 NumPy 数组中满足给定条件的项替换成另一个数值?


难度:L1

问题:将 arr 中的所有奇数替换成 -1。


输入:


arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


期望输出:


#> array([ 0, -1, 2, -1, 4, -1, 6, -1, 8, -1])


6. 如何在不影响原始数组的前提下替换满足给定条件的项?


难度:L2

问题:将 arr 中所有奇数替换成 -1,且不改变 arr。


输入:


arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


期望输出:


out

#> array([ 0, -1, 2, -1, 4, -1, 6, -1, 8, -1])

arr

#> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


7. 如何重塑(reshape)数组?


难度:L1

问题:将 1 维数组转换成 2 维数组(两行)。


输入:


np.arange(10)

#> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


期望输出


#> array([[0, 1, 2, 3, 4],

#>        [5, 6, 7, 8, 9]])


8. 如何垂直堆叠两个数组?


难度:L2

问题:垂直堆叠数组 a 和 b。


输入:


a = np.arange(10).reshape(2,-1)

b = np.repeat(1, 10).reshape(2,-1)


期望输出:


#> array([[0, 1, 2, 3, 4],

#>        [5, 6, 7, 8, 9],

#>        [1, 1, 1, 1, 1],

#>        [1, 1, 1, 1, 1]])


9. 如何水平堆叠两个数组?


难度:L2

问题:水平堆叠数组 a 和 b。


输入:


a = np.arange(10).reshape(2,-1)

b = np.repeat(1, 10).reshape(2,-1)


期望输出:


#> array([[0, 1, 2, 3, 4, 1, 1, 1, 1, 1],

#>        [5, 6, 7, 8, 9, 1, 1, 1, 1, 1]])


10. 在不使用硬编码的前提下,如何在 NumPy 中生成自定义序列?


难度:L2

问题:在不使用硬编码的前提下创建以下模式。仅使用 NumPy 函数和以下输入数组 a。


输入:


a = np.array([1,2,3])`


期望输出:


#> array([1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3])


11. 如何获得两个 Python NumPy 数组中共同的项?


难度:L2

问题:获取数组 a 和 b 中的共同项。


输入:


a = np.array([1,2,3,2,3,4,3,4,5,6])

b = np.array([7,2,10,2,7,4,9,4,9,8])


期望输出:


array([2, 4])


12. 如何从一个数组中移除与另一个数组重复的项?


难度:L2

问题:从数组 a 中移除出现在数组 b 中的所有项。


输入:


a = np.array([1,2,3,4,5])

b = np.array([5,6,7,8,9])


期望输出:


array([1,2,3,4])


13. 如何获取两个数组匹配元素的位置?


难度:L2

问题:获取数组 a 和 b 中匹配元素的位置。


输入:


a = np.array([1,2,3,2,3,4,3,4,5,6])

b = np.array([7,2,10,2,7,4,9,4,9,8])


期望输出:


#> (array([1, 3, 5, 7]),)


14. 如何从 NumPy 数组中提取给定范围内的所有数字?


难度:L2

问题:从数组 a 中提取 5 和 10 之间的所有项。


输入:


a = np.arange(15)


期望输出:


(array([ 5, 6, 7, 8, 9, 10]),)


15. 如何创建一个 Python 函数以对 NumPy 数组执行元素级的操作?


难度:L2

问题:转换函数 maxx,使其从只能对比标量而变为对比两个数组。


输入:


def maxx(x, y):

    """Get the maximum of two items"""

    if x >= y:

        return x

    else:

        return y


maxx(1, 5)

#> 5

期望输出:


a = np.array([5, 7, 9, 8, 6, 4, 5])

b = np.array([6, 3, 4, 8, 9, 7, 1])

pair_max(a, b)

#> array([ 6.,  7.,  9.,  8.,  9.,  7.,  5.])


16. 如何在 2d NumPy 数组中交换两个列?


难度:L2

问题:在数组 arr 中交换列 1 和列 2。


arr = np.arange(9).reshape(3,3)

arr


17. 如何在 2d NumPy 数组中交换两个行?


难度:L2

问题:在数组 arr 中交换行 1 和行 2。


arr = np.arange(9).reshape(3,3)

arr


18. 如何反转 2D 数组的所有行?


难度:L2

问题:反转 2D 数组 arr 中的所有行。


# Input

arr = np.arange(9).reshape(3,3)


19. 如何反转 2D 数组的所有列?


难度:L2

问题:反转 2D 数组 arr 中的所有列。


# Input

arr = np.arange(9).reshape(3,3)


20. 如何创建一个包含 5 和 10 之间随机浮点的 2 维数组?


难度:L2

问题:创建一个形态为 5×3 的 2 维数组,包含 5 和 10 之间的随机十进制小数。


21. 如何在 Python NumPy 数组中仅输出小数点后三位的数字?


难度:L1

问题:输出或显示 NumPy 数组 rand_arr 中小数点后三位的数字。


输入:


rand_arr = np.random.random((5,3))


22. 如何通过禁用科学计数法(如 1e10)打印 NumPy 数组?


难度:L1

问题:通过禁用科学计数法(如 1e10)打印 NumPy 数组 rand_arr。


输入:


# Create the random array

np.random.seed(100)

rand_arr = np.random.random([3,3])/1e3

rand_arr


#> array([[  5.434049e-04,   2.783694e-04,   4.245176e-04],

#>        [  8.447761e-04,   4.718856e-06,   1.215691e-04],

#>        [  6.707491e-04,   8.258528e-04,   1.367066e-04]])


期望输出:


#> array([[ 0.000543,  0.000278,  0.000425],

#>        [ 0.000845,  0.000005,  0.000122],

#>        [ 0.000671,  0.000826,  0.000137]])


23. 如何限制 NumPy 数组输出中项的数目?


难度:L1

问题:将 Python NumPy 数组 a 输出的项的数目限制在最多 6 个元素。


输入:


a = np.arange(15)

#> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])


期望输出:


#> array([ 0, 1, 2, ..., 12, 13, 14])


24. 如何在不截断数组的前提下打印出完整的 NumPy 数组?


难度:L1

问题:在不截断数组的前提下打印出完整的 NumPy 数组 a。


输入:


np.set_printoptions(threshold=6)

a = np.arange(15)

a

#> array([ 0, 1, 2, ..., 12, 13, 14])


期望输出:


a

#> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])


25. 如何向 Python NumPy 导入包含数字和文本的数据集,同时保持文本不变?


难度:L2

问题:导入 iris 数据集,保持文本不变。


26. 如何从 1 维元组数组中提取特定的列?


难度:L2

问题:从前一个问题导入的 1 维 iris 中提取文本列 species。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_1d = np.genfromtxt(url, delimiter=',', dtype=None)


27. 如何将 1 维元组数组转换成 2 维 NumPy 数组?


难度:L2

问题:忽略 species 文本字段,将 1 维 iris 转换成 2 维数组 iris_2d。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_1d = np.genfromtxt(url, delimiter=',', dtype=None)


28. 如何计算 NumPy 数组的平均值、中位数和标准差?


难度:L1

问题:找出 iris sepallength(第一列)的平均值、中位数和标准差。


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')


29. 如何归一化数组,使值的范围在 0 和 1 之间?


难度:L2

问题:创建 iris sepallength 的归一化格式,使其值在 0 到 1 之间。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

sepallength = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0])


30. 如何计算 softmax 分数?


难度:L3

问题:计算 sepallength 的 softmax 分数。


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

sepallength = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0])


31. 如何找到 NumPy 数组的百分数?


难度:L1

问题:找出 iris sepallength(第一列)的第 5 个和第 95 个百分数。


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

sepallength = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0])


32. 如何在数组的随机位置插入值?


难度:L2

问题:在 iris_2d 数据集中的 20 个随机位置插入 np.nan 值。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='object')


33. 如何在 NumPy 数组中找出缺失值的位置?


难度:L2

问题:在 iris_2d 的 sepallength(第一列)中找出缺失值的数目和位置。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float')

iris_2d[np.random.randint(150, size=20), np.random.randint(4, size=20)] = np.nan


34. 如何基于两个或以上条件过滤 NumPy 数组?


难度:L3

问题:过滤 iris_2d 中满足 petallength(第三列)> 1.5 和 sepallength(第一列)< 5.0 的行。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])


35. 如何在 NumPy 数组中删除包含缺失值的行?


难度:L3

问题:选择 iris_2d 中不包含 nan 值的行。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])


36. 如何找出 NumPy 数组中两列之间的关联性?


难度:L2

问题:找出 iris_2d 中 SepalLength(第一列)和 PetalLength(第三列)之间的关联性。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])


37. 如何确定给定数组是否有空值?


难度:L2

问题:确定 iris_2d 是否有缺失值。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])


38. 如何在 NumPy 数组中将所有缺失值替换成 0?


难度:L2

问题:在 NumPy 数组中将所有 nan 替换成 0。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])

iris_2d[np.random.randint(150, size=20), np.random.randint(4, size=20)] = np.nan


39. 如何在 NumPy 数组中找出唯一值的数量?


难度:L2

问题:在 iris 的 species 列中找出唯一值及其数量。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


40. 如何将一个数值转换为一个类别(文本)数组?


难度:L2

问题:将 iris_2d 的 petallength(第三列)转换以构建一个文本数组,按如下规则进行转换:


  • Less than 3 –> ‘small’

  • 3-5 –> 'medium'

  • '>=5 –> 'large'


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


41. 如何基于 NumPy 数组现有列创建一个新的列?


难度:L2

问题:为 iris_2d 中的 volume 列创建一个新的列,volume 指 (pi x petallength x sepal_length^2)/3。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris_2d = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


42. 如何在 NumPy 中执行概率采样?


难度:L3

问题:随机采样 iris 数据集中的 species 列,使得 setose 的数量是 versicolor 和 virginica 数量的两倍。


# Import iris keeping the text column intact

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')


43. 如何在多维数组中找到一维的第二最大值?


难度:L2

问题:在 species setosa 的 petallength 列中找到第二最大值。


# Input

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


44. 如何用给定列将 2 维数组排序?


难度:L2

问题:基于 sepallength 列将 iris 数据集排序。


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


45. 如何在 NumPy 数组中找到最频繁出现的值?


难度:L1

问题:在 iris 数据集中找到 petallength(第三列)中最频繁出现的值。


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


46. 如何找到第一个大于给定值的数的位置?


难度:L2 

问题:在 iris 数据集的 petalwidth(第四列)中找到第一个值大于 1.0 的数的位置。


# Input:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')


47. 如何将数组中所有大于给定值的数替换为给定的 cutoff 值?


难度:L2

问题:对于数组 a,将所有大于 30 的值替换为 30,将所有小于 10 的值替换为 10。


输入:


np.random.seed(100)

np.random.uniform(1,50, 20)


48. 如何在 NumPy 数组中找到 top-n 数值的位置?


难度:L2

问题:在给定数组 a 中找到 top-5 最大值的位置。


np.random.seed(100)

a = np.random.uniform(1,50, 20)


49. 如何逐行计算数组中所有值的数量?


难度:L4

问题:逐行计算唯一值的数量。


输入:


np.random.seed(100)

arr = np.random.randint(1,11,size=(6, 10))

arr

> array([[ 9,  9,  4,  8,  8,  1,  5,  3,  6,  3],

>        [ 3,  3,  2,  1,  9,  5,  1, 10,  7,  3],

>        [ 5,  2,  6,  4,  5,  5,  4,  8,  2,  2],

>        [ 8,  8,  1,  3, 10, 10,  4,  3,  6,  9],

>        [ 2,  1,  8,  7,  3,  1,  9,  3,  6,  2],

>        [ 9,  2,  6,  5,  3,  9,  4,  6,  1, 10]])



期望输出:


> [[1, 0, 2, 1, 1, 1, 0, 2, 2, 0],

> [2, 1, 3, 0, 1, 0, 1, 0, 1, 1],

> [0, 3, 0, 2, 3, 1, 0, 1, 0, 0],

> [1, 0, 2, 1, 0, 1, 0, 2, 1, 2],

> [2, 2, 2, 0, 0, 1, 1, 1, 1, 0],

> [1, 1, 1, 1, 1, 2, 0, 0, 2, 1]]


输出包含 10 个列,表示从 1 到 10 的数字。这些数值分别代表每一行的计数数量。例如,Cell(0,2) 中有值 2,这意味着,数字 3 在第一行出现了两次。


50. 如何将 array_of_arrays 转换为平面 1 维数组?


难度:L2

问题:将 array_of_arrays 转换为平面线性 1 维数组。


# Input:

arr1 = np.arange(3)

arr2 = np.arange(3,7)

arr3 = np.arange(7,10)

array_of_arrays = np.array([arr1, arr2, arr3])

array_of_arrays#> array([array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])], dtype=object)


期望输出:


#> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


51. 如何为 NumPy 数组生成 one-hot 编码?


难度:L4

问题:计算 one-hot 编码。


输入:


np.random.seed(101) 

arr = np.random.randint(1,4, size=6)

arr

#> array([2, 3, 2, 2, 2, 1])


输出:


#> array([[ 0.,  1.,  0.],

#>        [ 0.,  0.,  1.],

#>        [ 0.,  1.,  0.],

#>        [ 0.,  1.,  0.],

#>        [ 0.,  1.,  0.],

#>        [ 1.,  0.,  0.]])


52. 如何创建由类别变量分组确定的一维数值?


难度:L3

问题:创建由类别变量分组的行数。使用以下来自 iris species 的样本作为输入。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

species = np.genfromtxt(url, delimiter=',', dtype='str', usecols=4)

species_small = np.sort(np.random.choice(species, size=20))

species_small

#> array(['Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa',

#>        'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor',

#>        'Iris-versicolor', 'Iris-versicolor', 'Iris-versicolor',

#>        'Iris-versicolor', 'Iris-virginica', 'Iris-virginica',

#>        'Iris-virginica', 'Iris-virginica', 'Iris-virginica',

#>        'Iris-virginica', 'Iris-virginica', 'Iris-virginica'],

#>       dtype='


期望输出:


#> [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6, 7]


53. 如何基于给定的类别变量创建分组 id?


难度:L4

问题:基于给定的类别变量创建分组 id。使用以下来自 iris species 的样本作为输入。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

species = np.genfromtxt(url, delimiter=',', dtype='str', usecols=4)

species_small = np.sort(np.random.choice(species, size=20))

species_small

#> array(['Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa',

#>        'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor',

#>        'Iris-versicolor', 'Iris-versicolor', 'Iris-versicolor',

#>        'Iris-versicolor', 'Iris-virginica', 'Iris-virginica',

#>        'Iris-virginica', 'Iris-virginica', 'Iris-virginica',

#>        'Iris-virginica', 'Iris-virginica', 'Iris-virginica'],

#>       dtype='


期望输出:


#> [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]


54. 如何使用 NumPy 对数组中的项进行排序?


难度:L2

问题:为给定的数值数组 a 创建排序。


输入:


np.random.seed(10)

a = np.random.randint(20, size=10)print(a)#> [ 9 4 15 0 17 16 17 8 9 0]


期望输出:


[4 2 6 0 8 7 9 3 5 1]


55. 如何使用 NumPy 对多维数组中的项进行排序?


难度:L3

问题:给出一个数值数组 a,创建一个形态相同的排序数组。


输入:


np.random.seed(10)

a = np.random.randint(20, size=[2,5])print(a)#> [[ 9 4 15 0 17]#> [16 17 8 9 0]]


期望输出:


#> [[4 2 6 0 8]

#> [7 9 3 5 1]]


56. 如何在 2 维 NumPy 数组中找到每一行的最大值?


难度:L2

问题:在给定数组中找到每一行的最大值。


np.random.seed(100)

a = np.random.randint(1,10, [5,3])

a

#> array([[9, 9, 4],

#>        [8, 8, 1],

#>        [5, 3, 6],

#>        [3, 3, 3],

#>        [2, 1, 9]])


57. 如何计算 2 维 NumPy 数组每一行的 min-by-max?


难度:L3

问题:给定一个 2 维 NumPy 数组,计算每一行的 min-by-max。


np.random.seed(100)

a = np.random.randint(1,10, [5,3])

a

#> array([[9, 9, 4],

#>        [8, 8, 1],

#>        [5, 3, 6],

#>        [3, 3, 3],

#>        [2, 1, 9]])


58. 如何在 NumPy 数组中找到重复条目?


难度:L3

问题:在给定的 NumPy 数组中找到重复条目(从第二次出现开始),并将其标记为 True。第一次出现的条目需要标记为 False。


# Input

np.random.seed(100)

a = np.random.randint(0, 5, 10)

print('Array: ', a)

#> Array: [0 0 3 0 2 4 2 2 2 2]


期望输出:


#> [False True False True False False True True True True]


59. 如何找到 NumPy 的分组平均值?


难度:L3

问题:在 2 维 NumPy 数组的类别列中找到数值的平均值。


输入:


url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'

iris = np.genfromtxt(url, delimiter=',', dtype='object')

names = ('sepallength', 'sepalwidth', 'petallength', 'petalwidth', 'species')


期望解:


#> [[b'Iris-setosa', 3.418],

#> [b'Iris-versicolor', 2.770],

#> [b'Iris-virginica', 2.974]]


60. 如何将 PIL 图像转换成 NumPy 数组?


难度:L3

问题:从以下 URL 中导入图像,并将其转换成 NumPy 数组。


URL = 'https://upload.wikimedia.org/wikipedia/commons/8/8b/Denali_Mt_McKinley.jpg'


61. 如何删除 NumPy 数组中所有的缺失值?


难度:L2

问题:从 1 维 NumPy 数组中删除所有的 nan 值。


输入:


np.array([1,2,3,np.nan,5,6,7,np.nan])


期望输出:


array([ 1., 2., 3., 5., 6., 7.])


62. 如何计算两个数组之间的欧几里得距离?


难度:L3

问题:计算两个数组 a 和 b 之间的欧几里得距离。


输入:


a = np.array([1,2,3,4,5])

b = np.array([4,5,6,7,8])


63. 如何在一个 1 维数组中找到所有的局部极大值(peak)?


难度:L4

问题:在 1 维数组 a 中找到所有的 peak,peak 指一个数字比两侧的数字都大。


输入:


a = np.array([1, 3, 7, 1, 2, 6, 0, 1])


期望输出:


#> array([2, 5])


64. 如何从 2 维数组中减去 1 维数组,从 2 维数组的每一行分别减去 1 维数组的每一项?


难度:L2

问题:从 2 维数组 a_2d 中减去 1 维数组 b_1d,即从 a_2d 的每一行分别减去 b_1d 的每一项。


输入:


a_2d = np.array([[3,3,3],[4,4,4],[5,5,5]])

b_1d = np.array([1,1,1]


期望输出:


#> [[2 2 2]

#> [2 2 2]

#> [2 2 2]]


65. 如何在数组中找出某个项的第 n 个重复索引?


难度:L2

问题:找到数组 x 中数字 1 的第 5 个重复索引。


x = np.array([1, 2, 1, 1, 3, 4, 3, 1, 1, 2, 1, 1, 2])


66. 如何将 NumPy 的 datetime64 对象(object)转换为 datetime 的 datetime 对象?


难度:L2

问题:将 NumPy 的 datetime64 对象(object)转换为 datetime 的 datetime 对象。


# Input: a numpy datetime64 object

dt64 = np.datetime64('2018-02-25 22:10:10')


67. 如何计算 NumPy 数组的移动平均数?


难度:L3

问题:给定 1 维数组,计算 window size 为 3 的移动平均数。


输入:


np.random.seed(100)

Z = np.random.randint(10, size=10)


68. 给定起始数字、length 和步长,如何创建一个 NumPy 数组序列?


难度:L2

问题:从 5 开始,创建一个 length 为 10 的 NumPy 数组,相邻数字的差是 3。


69. 如何在不规则 NumPy 日期序列中填充缺失日期?


难度:L3

问题:给定一个非连续日期序列的数组,通过填充缺失的日期,使其变成连续的日期序列。


输入:


# Input

dates = np.arange(np.datetime64('2018-02-01'), np.datetime64('2018-02-25'), 2)

print(dates)

#> ['2018-02-01' '2018-02-03' '2018-02-05' '2018-02-07' '2018-02-09'

#>  '2018-02-11' '2018-02-13' '2018-02-15' '2018-02-17' '2018-02-19'

#>  '2018-02-21' '2018-02-23']


70. 如何基于给定的 1 维数组创建 strides?


难度:L4

问题:给定 1 维数组 arr,使用 strides 生成一个 2 维矩阵,其中 window length 等于 4,strides 等于 2,例如 [[0,1,2,3], [2,3,4,5], [4,5,6,7]..]。


输入:


arr = np.arange(15) 

arr

#> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])


期望输出:


#> [[ 0 1 2 3]

#> [ 2 3 4 5]

#> [ 4 5 6 7]

#> [ 6 7 8 9]

#> [ 8 9 10 11]

#> [10 11 12 13]]


所有问题的解决方案参见原文:https://www.machinelearningplus.com/101-numpy-exercises-python/



本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:editor@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接