来源:知乎用户 靳伟 本文仅用于学习交流分享如有侵权请联系删除
原作者: 2016 Nicolas P. Rougier MIT协议 翻译版权归我所有
此合集旨在于为NumPy新老用户提供快速参考和一些练习。这些练习题主要来自于NumPy邮件组,StackOverflow和NumPy文档. 答案在最后面
问题开始:
np
导入numpy包 (★☆☆)
16. 如何在一个既有数组周围添加边框(用0填充) (★☆☆)
17. 下方表达式的结果是什么? (★☆☆)
0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
np.nan in set([np.nan])
0.3 == 3 * 0.1
18. 创建一个5x5矩阵, 其对角线下方的数值正好是1,2,3,4 (★☆☆)
19. 创建一个8x8矩阵并用棋盘图案填充它 (★☆☆)
20. 假设有一个(6,7,8)形状的三维数组,那么其中第100个元素的索引(x,y,z)是什么?
21. 使用tile函数创建棋盘格8x8矩阵 (★☆☆)
22. 把一个5x5随机矩阵归一化 (★☆☆)
23. 创建一个自定义dtype,用这个数据类型可以将颜色描述为四个无符号字节(RGBA)(★☆☆)
24. 5x3矩阵乘以3x2矩阵(实矩阵乘积) (★☆☆)
25. 给定一维数组,所有在3到8之间的元素都变成其负数(正->负, 负->正). (★☆☆)
26. 这段脚本的输出是什么?(★☆☆)
# Author: Jake VanderPlas
print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))
Z**Z
2 << Z >> 2
Z <- Z
1j*Z
Z/1/1
Z<Z>Z
28. 以下表达式的结果是什么?
np.array(0) / np.array(0)
np.array(0) // np.array(0)
np.array([np.nan]).astype(int).astype(float)
29. 如何让一个浮点类型数组里面的值全部取整? (★☆☆)
30. 如何在两个数组之间找到相同的值? (★☆☆)
31. 如何忽略所有的numpy警告(真正干活的时候不推荐这么干哈)?? (★☆☆)
32. 以下表达式为真吗?(★☆☆)
np.sqrt(-1) == np.emath.sqrt(-1)
33. 如何获取昨天,今天和明天的日期? (★☆☆)
34. 如何获得与2016年7月里的所有日期? (★★☆)
35. 如何原地计算 ((A+B)*(-A/2)) (不做copy动作)? (★★☆)
36. 使用5种不同的方法提取一个随机数组里的整型数据部分 (★★☆)
37. 创建一个5x5矩阵,行值从0到4 (★★☆)
38. 已知一个生成器函数, 可以生成10个整数. 用它来构建数组 (★☆☆)
39. 创建一个大小为10的向量,值为0到1的小数(不包含0和1) (★★☆)
40. 创建一个大小为10的随机向量并对其进行排序 (★★☆)
41. 如何比np.sum更快地对一个小数组求和?(★★☆)
42. 设有两个随机数组A和B,检查它们是否相等 (★★☆)
43. 使数组不可变(只读) (★★☆)
44. 设有一个随机10x2矩阵, 其中的值代表笛卡尔坐标,现需将它们转换为极坐标 (★★☆)
45. 创建大小为10的随机向量,并将最大值替换为0 (★★☆)
46. 创建一个结构化数组,其x和y坐标覆盖[0,1] x [0,1]区域 (★★☆)
47. 打印每个numpy标量类型的最小和最大可表示值 (★★☆)
48. 如何打印数组的所有值?(★★☆)
50. 如何在向量中找到最接近的值(给定标量)?(★★☆)
51. 创建一个表示位置(x,y)和颜色(r,g,b)的结构化数组(★★☆)
52. 设有一个(100,2)的随机向量, 每组值代表一个坐标, 求点与点之间的距离 (★★☆)
53. 如何就地将float(32位)数组转换为整型(32位)数组?
54. 如何读取以下文件?? (★★☆)
1, 2, 3, 4, 5
6, , , 7, 8
, , 9,10,11
55. 什么东西与numpy数组的枚举等价?(★★☆)
56. 生成一个通用的二维高斯型数组 (★★☆)
57. 如何将p个元素随机放置在二维数组中 (★★☆)
58. 减去矩阵每行的均值 (★★☆)
59. 如何按第n列排序数组?(★★☆)
60. 如何判断一个二维数组里是否有空列? (★★☆)
61. 有一个给定值, 从数组中找出最接近的值 (★★☆)
62. 设有两个形状为(1,3)和(3,1)的数组,如何使用迭代器计算它们的总和?(★★☆)
63. 创建一个具有name属性的数组类(★★☆)
64. 设有一个给定的向量,如何让每个能被第二个向量索引的元素加1(注意重复索引的情况)?(★★★)
65. 如何根据索引列表(I)将向量(X)的指定元素转移到到数组(F)?(★★★)
66. 设有一个(dtype = ubyte)的(w,h,3)图像,计算内部不同颜色的数量(★★★)
67. 设有一个四维数组,如何一次获取最后两个轴上元素的总和?(★★★)
68. 设有一个单一维度的向量D, 如何计算D的一个子集的平均值 (该子集使用一个和D相同大小的向量S来存子集元素的索引? (★★★)
69. 如何获得两个向量的点积? (★★★)
点积就是两个向量对应位置一一相乘后求和的操作,最后结果是一个标量,是一个实数值。 两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为: a·b = a1b1 + a2b2 + …… + anbn。 使用矩阵乘法并把(纵列)向量当作n×1 矩阵,点积还可以写为: a·b=a^T*b ,这里的a^T指示矩阵a的转置
70. 设有考虑向量A [1,2,3,4,5],构建一个新向量, 在A的每个值之间插入3个连续零? (★★★)
71. 设有一个维度(5,5,3)的数组, 如何与维度(5,5)的数组相乘? (★★★)
72. 如何让数组里面的两行互换? (★★★)
73. 设有10个三元组(例如[x1, y1, z1]), 每个三元组代表一个三角形. 这些三角形可能还有共同的顶点. 现在需要找出组成这10个三角形的所有线段的集合(还要去重哦) (★★★)
74. 设有一个bincount数组C, 请生成一个数组A, 使得np.bincount(A) == C? (★★★)
解释一下什么叫bincount
import numpy as np
# x里最大的数为10,那么它的索引值为0到10, 因此bin的数量为11
x = np.array([1, 1, 1, 6, 4, 4, 0, 0, 10])
# 0出现了2次,1出现了3次......10出现了1次......
print(np.bincount(x))
#因此,输出结果为:[2 3 0 0 2 0 1 0 0 0 1]
# 我们可以看到x中最大的数为18,那么它的索引值为0到18, 因此bin的数量为19
x = np.array([18, 10, 2, 10, 4, 1])
# 0出现了0次,索引1出现了1次......索引10出现了2次......
print(np.bincount(x))
#输出结果为:[0 1 1 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 1]
75. 如何使用数组上的滑动窗口计算平均值?(★★★)
76. 设有一个一维数组Z,请构建一个二维数组,其第一行为(Z [0],Z [1],Z [2]),每个后续行都要移1单位(最后一行应为(Z [ -3],Z [-2],Z [-1]) (★★★)
77. 如何反转一个布尔值(true->false或false->true), 或改变浮点值前面的正负号(正浮点数变成负浮点数, 或负浮点数变正浮点数)? (★★★)
78. 设有两组的 点 数据, 这些点 两两可以构建成一个线段. 同时设有一个点p, 如何计算从p到每个线段的垂直距离?(★★★)
下图为一个样例
79. 设有两组的 点 数据, 这些点 两两可以构建成一个线段. 同时设有一系列点P, 如何计算从P[j]到每个线段的垂直距离? (★★★) 可参考上一道题
80. 设有一个任意数组,编写一个函数,以给定元素为中心, 提取具有固定形状的子部分(必要时可以用固定值来做填充)(★★★)
81. 设有一个Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 求一个数组R = [[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]? (★★★)
82. 求一个矩阵的秩 (★★★)
秩(RANK), 我们知道线性代数中的矩阵, 有一种含义就是代表一个方程组, 矩阵的秩就是这个方程组中那些原有的成员的数量
83. 如何找出一个数组里出现次数最多的元素?
84. 从一个随机的10x10矩阵中提取所有连续的3x3块(★★★)
85. 创建一个二维数组子类,使Z [i,j] == Z [j,i] (★★★)
86. 设有P个矩阵, 形状为(n,n); 以及p个向量, 形状为(n,1). 问题是, 如何一次就算出p矩阵乘积之和(结果的形状应该是(n,1)) (★★★)
87.设有一个16x16的数组, 如何获得分块加总 (每个块都是4* 4)? (★★★)
88. 如何使用numpy数组实现the Game of Life?(★★★)
89. 如何获取一个数组里面前N大 (the largest n) 的元素? (★★★)
90. 给定任意数量的向量,请用它们构建笛卡尔积(每个项的每个组合)(★★★)
91. 如何使用一个常规数组创建一个记录数组(record array)? (★★★)
92. 设有一个很大的向量 Z, 求Z的3次幂(至少尝试3种不同的方法) (★★★)
93. 设有两个数组A和B, A的形状(8,3), B的形状是(2,2). 请找出A的某些行, 该行内包含B的整行元素(不在意元素顺序). (★★★)
94. 设有一个10x3矩阵,请找出其中数值不完全相等的行 (e.g. [2,2,3]) (★★★)
95. 将int的向量转换为二元矩阵来表示(★★★)
96. 设有一个二维数组,如何提取值和其他行都不同的行?(★★★)
97. 设有两个向量A和B, 请写出AB求inner, outer, sum和mul运算的爱因斯坦求和约定(einsum)等效形式. (★★★)
注: 关于einsum, 可以来这里学习
98. 设有两个矢量(X,Y)描述的一条路径,如何使用等距样本法对其进行采样
99. 给定整数n和2维数组X,从X中选择可以解释为具有n度的多项分布的行,即,仅包含整数并且总和为n的行。(★★★)
100. 计算一个1维数组X的平均值, 要求使用自展法求95%的置信区间. (即,对数组重复N次采样, 每次采样更换部分元素, 然后计算每个样本的平均值,最后计算均值上的百分位数) (★★★)
答案:https://aistudio.baidu.com/aistudio/projectDetail/118377