别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(九)

简介: 别整天 “学妹/前女友”了,花2小时整理了Numpy测试习题100道,做个测验吧!(九)

90. 给定任意个数向量,创建笛卡尔积(每一个元素的每一种组合) (★★★)

(提示: np.indices)


# Author: Stefan Van der Walt
def cartesian(arrays):
    arrays = [np.asarray(a) for a in arrays]
    shape = (len(x) for x in arrays)
    ix = np.indices(shape, dtype=int)
    ix = ix.reshape(len(arrays), -1).T
    for n, arr in enumerate(arrays):
        ix[:, n] = arrays[n][ix[:, n]]
    return ix
print (cartesian(([1, 2, 3], [4, 5], [6, 7])))


91. 如何从一个常规数组中创建记录数组(record array)? (★★★)

(提示: np.core.records.fromarrays)


Z = np.array([("Hello", 2.5, 3),
              ("World", 3.6, 2)])
R = np.core.records.fromarrays(Z.T, 
                               names='col1, col2, col3',
                               formats = 'S8, f8, i8')
print(R)


92. 思考一个大向量Z, 用三种不同的方法计算它的立方 (★★★)

(提示: np.power, *, np.einsum)


# Author: Ryan G.
x = np.random.rand(5e7)
%timeit np.power(x,3)
%timeit x*x*x
%timeit np.einsum('i,i,i->i',x,x,x)


93. 考虑两个形状分别为(8,3) 和(2,2)的数组A和B. 如何在数组A中找到满足包含B中元素的行?(不考虑B中每行元素顺序)? (★★★)

(提示: np.where)


# Author: Gabe Schwartz
A = np.random.randint(0,5,(8,3))
B = np.random.randint(0,5,(2,2))
C = (A[..., np.newaxis, np.newaxis] == B)
rows = np.where(C.any((3,1)).all(1))[0]
print(rows)


94. 思考一个10x3的矩阵,如何分解出有不全相同值的行 (如 [2,2,3]) (★★★)

# Author: Robert Kern
Z = np.random.randint(0,5,(10,3))
print(Z)
# solution for arrays of all dtypes (including string arrays and record arrays)
E = np.all(Z[:,1:] == Z[:,:-1], axis=1)
U = Z[~E]
print(U)
# soluiton for numerical arrays only, will work for any number of columns in Z
U = Z[Z.max(axis=1) != Z.min(axis=1),:]
print(U)


95. 将一个整数向量转换为二进制矩阵 (★★★)

(提示: np.unpackbits)


# Author: Warren Weckesser
I = np.array([0, 1, 2, 3, 15, 16, 32, 64, 128])
B = ((I.reshape(-1,1) & (2**np.arange(8))) != 0).astype(int)
print(B[:,::-1])
# Author: Daniel T. McDonald
I = np.array([0, 1, 2, 3, 15, 16, 32, 64, 128], dtype=np.uint8)
print(np.unpackbits(I[:, np.newaxis], axis=1))


96. 给定一个二维数组,如何提取出唯一的行?(★★★)

(提示: np.ascontiguousarray)


# Author: Jaime Fernández del Río
Z = np.random.randint(0,2,(6,3))
T = np.ascontiguousarray(Z).view(np.dtype((np.void, Z.dtype.itemsize * Z.shape[1])))
_, idx = np.unique(T, return_index=True)
uZ = Z[idx]
print(uZ)


97. 考虑两个向量A和B,写出用einsum等式对应的inner, outer, sum, mul函数 (★★★)

(提示: np.einsum)


# Author: Alex Riley
# Make sure to read: http://ajcr.net/Basic-guide-to-einsum/
A = np.random.uniform(0,1,10)
B = np.random.uniform(0,1,10)
np.einsum('i->', A)       # np.sum(A)
np.einsum('i,i->i', A, B) # A * B
np.einsum('i,i', A, B)    # np.inner(A, B)
np.einsum('i,j->ij', A, B)    # np.outer(A, B)


98. 考虑一个由两个向量描述的路径(X,Y),如何用等距样例(equidistant samples)对其进行采样(sample)(★★★)?

(提示: np.cumsum, np.interp)


# Author: Bas Swinckels
phi = np.arange(0, 10*np.pi, 0.1)
a = 1
x = a*phi*np.cos(phi)
y = a*phi*np.sin(phi)
dr = (np.diff(x)**2 + np.diff(y)**2)**.5 # segment lengths
r = np.zeros_like(x)
r[1:] = np.cumsum(dr)                # integrate path
r_int = np.linspace(0, r.max(), 200) # regular spaced path
x_int = np.interp(r_int, r, x)       # integrate path
y_int = np.interp(r_int, r, y)


99. 给定一个整数n 和一个二维数组X,从X中选择可以被解释为从多n度的多项分布式的行,即这些行只包含整数对n的和. (★★★)

(提示: np.logical_and.reduce, np.mod)


# Author: Evgeni Burovski
X = np.asarray([[1.0, 0.0, 3.0, 8.0],
                [2.0, 0.0, 1.0, 1.0],
                [1.5, 2.5, 1.0, 0.0]])
n = 4
M = np.logical_and.reduce(np.mod(X, 1) == 0, axis=-1)
M &= (X.sum(axis=-1) == n)
print(X[M])


100. 对于一个一维数组X,计算它boostrapped之后的95%置信区间的平均值. (★★★)

(提示: np.percentile)


# Author: Jessica B. Hamrick
X = np.random.randn(100) # random 1D array
N = 1000 # number of bootstrap samples
idx = np.random.randint(0, X.size, (N, X.size))
means = X[idx].mean(axis=1)
confint = np.percentile(means, [2.5, 97.5])
print(confint)
相关文章
|
机器学习/深度学习 数据挖掘 测试技术
软件测试|Python科学计算神器numpy教程(十二)
软件测试|Python科学计算神器numpy教程(十二)
|
3月前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
7月前
|
存储 C++ Python
学会使用 NumPy:基础、随机、ufunc 和练习测试
NumPy是Python的数值计算库,提供高效的多维数组对象`ndarray`和相关运算函数。它比Python列表快50倍,广泛用于数据科学,其中数组操作至关重要。要创建数组,可以使用`np.array()`。安装NumPy只需运行`pip install numpy`,导入时常用`import numpy as np`作为别名。要检查版本,使用`np.__version__`。
63 0
|
测试技术 数据处理 Python
软件测试|Python科学计算神器numpy教程(十)
软件测试|Python科学计算神器numpy教程(十)
|
测试技术 索引 Python
软件测试|Python科学计算神器numpy教程(七)
软件测试|Python科学计算神器numpy教程(七)
|
数据可视化 数据挖掘 测试技术
软件测试|Python科学计算神器numpy教程(三)
软件测试|Python科学计算神器numpy教程(三)
|
测试技术 Serverless Python
软件测试|Python科学计算神器numpy教程(十一)
软件测试|Python科学计算神器numpy教程(十一)
|
机器学习/深度学习 测试技术 数据处理
软件测试|Python科学计算神器numpy教程(九)
软件测试|Python科学计算神器numpy教程(九)
|
测试技术 数据处理 Python
软件测试|Python科学计算神器numpy教程(八)
软件测试|Python科学计算神器numpy教程(八)
|
数据挖掘 测试技术 Python
软件测试|Python科学计算神器numpy教程(六)
软件测试|Python科学计算神器numpy教程(六)