100个Numpy练习【3】

Numpy是Python做数据分析必须掌握的基础库之一,非常适合刚学习完Numpy基础的同学,完成以下习题可以帮助你更好的掌握这个基础库。

Python版本:Python 3.6.2

Numpy版本:Numpy 1.13.1

41. 对一个小数组进行求和有没有办法比np.sum更快? (★★☆)

(提示: np.add.reduce)

# Author: Evgeni Burovski

Z = np.arange(10)
np.add.reduce(Z)

# np.add.reduce 是numpy.add模块中的一个ufunc(universal function)函数,C语言实现

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. 将一个10×2的笛卡尔坐标矩阵转换为极坐标 (★★☆)

(提示: 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. 创建一个结构化数组,其中xy坐标覆盖[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. 给定两个数组XY,构造柯西(Cauchy)矩阵C ($C_{ij}=\frac{1}{x_i-y_j}$) (★★☆)

(提示: np.subtract.outer)
# Author: Evgeni Burovski

X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print (C)
print(np.linalg.det(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])

56. 构造一个二维高斯矩阵(★★☆)

(提示: np.meshgrid, np.exp)

X, Y = np.meshgrid(np.linspace(-1, 1, 10), np.linspace(-1, 1, 10))
D = np.sqrt(X**2 + Y**2)
sigma, mu = 1.0, 0.0
G = np.exp(-( (D-mu)**2 / (2.0*sigma**2) ))
print (G)

57. 如何在二维数组的随机位置放置p个元素? (★★☆)

(提示: np.put, np.random.choice)

# Author: Divakar

n = 10
p = 3
Z = np.zeros((n,n))
np.put(Z, np.random.choice(range(n*n), p, replace=False),1)
print(Z)

58. 减去矩阵每一行的平均值 (★★☆)

(提示: mean(axis=,keepdims=))

# Author: Warren Weckesser

X = np.random.rand(5, 10)

# 新
Y = X - X.mean(axis=1, keepdims=True)

# 旧
Y = X - X.mean(axis=1).reshape(-1, 1)

print(Y)

59. 如何对数组通过第n列进行排序? (★★☆)

(提示: argsort)

# Author: Steve Tjoa

Z = np.random.randint(0,10,(3,3))
print(Z)
print(Z[ Z[:,1].argsort() ])

60. 如何判断一个给定的二维数组存在空列? (★★☆)

(提示: any, ~)

# Author: Warren Weckesser

Z = np.random.randint(0,3,(3,10))
print((~Z.any(axis=0)).any())

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ACM算法日常

Max Sum(优化)- HDU 1003

Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...

823
来自专栏数据科学学习手札

(数据科学学习手札06)Python在数据框操作上的总结(初级篇)

数据框(Dataframe)作为一种十分标准的数据结构,是数据分析中最常用的数据结构,在Python和R中各有对数据框的不同定义和操作。 Python 本文涉及...

6745
来自专栏ATYUN订阅号

帮助数据科学家理解数据的23个pandas常用代码

返回给定轴缺失的标签对象,并在那里删除所有缺失数据(’any’:如果存在任何NA值,则删除该行或列。)。

854
来自专栏深度学习之tensorflow实战篇

tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读

一.安装 目前用了tensorflow、deeplearning4j两个深度学习框架, tensorflow 之前一直支持到python 3.5,目前以更...

4164
来自专栏云时之间

小白笔记——R语言(1)

最近一段时间的R语言学习笔记,以便于自己学习之用,特记录在博客中,感兴趣的人还可以看看。记录的东西也不一定正确,请大家指教,里面可能会引用到一些别人的资料等,作...

3429
来自专栏CNN

从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)

Tensorflow官方提供的Tensorboard可以可视化神经网络结构图,但是说实话,我几乎从来不用。主要是因为Tensorboard中查看到的图结构太混乱...

2.3K5
来自专栏数据结构与算法

11:大整数减法

11:大整数减法 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 求两个大的正整数相减的差。 输入共2行,第1行是被减...

28810
来自专栏应兆康的专栏

100个Numpy练习【3】

翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源: https://github.com/rougier/numpy-100...

43210
来自专栏数据结构与算法

07:清泉-改(prime+堆)

时间限制: 10000ms单个测试点时间限制: 1000ms内存限制: 512000kB描述 华北电力大学可以抽象为一张有n个点m条边的无向图. 现在所有的边都...

28210
来自专栏mathor

枚举+优化(8)——前缀和2

2515

扫码关注云+社区

领取腾讯云代金券