42. 如何判断两和随机数组相等 (★★☆)
(提示: np.allclose, np.array_equal)
A = np.random.randint(0, 2, 5) B = np.random.randint(0, 2, 5) # 假设array的形状(shape)相同和一个误差容限(tolerance) equal = np.allclose(A,B) print(equal) # 检查形状和元素值,没有误差容限(值必须完全相等) equal = np.array_equal(A,B) print(equal)
43. 把数组变为只读 (★★☆)
(提示: flags.writeable)
Z = np.zeros(5) Z.flags.writeable = False Z[0] = 1
44. 将一个10x2的笛卡尔坐标矩阵转换为极坐标 (★★☆)
(提示: np.sqrt, np.arctan2)
Z = np.random.random((10, 2)) X, Y = Z[:, 0], Z[:, 1] R = np.sqrt(X**2 + Y**2) T = np.arctan2(Y, X) print (R) print (T)
45. 创建一个大小为10的随机向量并且将该向量中最大的值替换为0(★★☆)
(提示: argmax)
Z = np.random.random(10) Z[Z.argmax()] = 0 print (Z)
46. 创建一个结构化数组,其中x和y坐标覆盖[0, 1]x[1, 0]区域 (★★☆)
(提示: np.meshgrid)
Z = np.zeros((5, 5), [('x', float), ('y', float)]) Z['x'], Z['y'] = np.meshgrid(np.linspace(0, 1, 5), np.linspace(0, 1, 5)) print (Z)
47. 给定两个数组X和Y,构造柯西(Cauchy)矩阵C (C i j = 1 x i − y j C_{ij}=\frac{1}{x_i-y_j}C
ij
=
x
i
−y
j
1
) (★★☆)
(提示: np.subtract.outer)
# Author: Evgeni Burovski X = np.arange(8) Y = X + 0.5 C = 1.0 / np.subtract.outer(X, Y) print (C)
48. 打印每个numpy 类型的最小和最大可表示值 (★★☆)
(提示: np.iinfo, np.finfo, eps)
for dtype in [np.int8, np.int32, np.int64]: print(np.iinfo(dtype).min) print(np.iinfo(dtype).max) for dtype in [np.float32, np.float64]: print(np.finfo(dtype).min) print(np.finfo(dtype).max) print(np.finfo(dtype).eps)
49. 如何打印数组中所有的值?(★★☆)
(提示: np.set_printoptions)
np.set_printoptions(threshold=np.nan) Z = np.zeros((16,16)) print(Z)
50. 如何在数组中找到与给定标量接近的值? (★★☆)
(提示: argmin)
Z = np.arange(100) v = np.random.uniform(0, 100) index = (np.abs(Z-v)).argmin() print(Z[index])
51. 创建表示位置(x, y)和颜色(r, g, b, a)的结构化数组 (★★☆)
(提示: dtype)
Z = np.zeros(10, [('position', [('x', float, 1), ('y', float, 1)]), ('color', [('r', float, 1), ('g', float, 1), ('b', float, 1)])]) print (Z)
52. 思考形状为(100, 2)的随机向量,求出点与点之间的距离 (★★☆)
(提示: np.atleast_2d, T, np.sqrt)
Z = np.random.random((100, 2)) X, Y = np.atleast_2d(Z[:, 0], Z[:, 1]) D = np.sqrt((X-X.T)**2 + (Y-Y.T)**2) print (D) # 使用scipy库可以更快 import scipy.spatial Z = np.random.random((100,2)) D = scipy.spatial.distance.cdist(Z,Z) print(D)
53. 如何将类型为float(32位)的数组类型转换位integer(32位)? (★★☆)
(提示: astype(copy=False))
Z = np.arange(10, dtype=np.int32) Z = Z.astype(np.float32, copy=False) print(Z)
54. 如何读取下面的文件? (★★☆)
(提示: np.genfromtxt)
1, 2, 3, 4, 5 6, , , 7, 8 , , 9,10,11 # 先把上面保存到文件example.txt中 # 这里不使用StringIO, 因为Python2 和Python3 在这个地方有兼容性问题 Z = np.genfromtxt("example.txt", delimiter=",") print(Z)
55. numpy数组枚举(enumerate)的等价操作? (★★☆)
(提示: np.ndenumerate, np.ndindex)
Z = np.arange(9).reshape(3,3) for index, value in np.ndenumerate(Z): print(index, value) for index in np.ndindex(Z.shape): print(index, Z[index])