100个Numpy练习【3】
时间:2022-05-05
本文章向大家介绍100个Numpy练习【3】,主要内容包括41. 对一个小数组进行求和有没有办法比np.sum更快? (★★☆)、42. 如何判断两和随机数组相等 (★★☆)、43. 把数组变为只读 (★★☆)、44. 将一个10×2的笛卡尔坐标矩阵转换为极坐标 (★★☆)、45. 创建一个大小为10的随机向量并且将该向量中最大的值替换为0(★★☆)、46. 创建一个结构化数组,其中x和y坐标覆盖[0, 1]x[1, 0]区域 (★★☆)、47. 给定两个数组X和Y,构造柯西(Cauchy)矩阵C ($C_{ij}=frac{1}{x_i-y_j}$) (★★☆)、48. 打印每个numpy 类型的最小和最大可表示值 (★★☆)、49. 如何打印数组中所有的值?(★★☆)、50. 如何在数组中找到与给定标量接近的值? (★★☆)、51. 创建表示位置(x, y)和颜色(r, g, b, a)的结构化数组 (★★☆)、52. 思考形状为(100, 2)的随机向量,求出点与点之间的距离 (★★☆)、53. 如何将类型为float(32位)的数组类型转换位integer(32位)? (★★☆)、54. 如何读取下面的文件? (★★☆)、55. numpy数组枚举(enumerate)的等价操作? (★★☆)、56. 构造一个二维高斯矩阵(★★☆)、57. 如何在二维数组的随机位置放置p个元素? (★★☆)、58. 减去矩阵每一行的平均值 (★★☆)、59. 如何对数组通过第n列进行排序? (★★☆)、60. 如何判断一个给定的二维数组存在空列? (★★☆)、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
- 翻译:YingJoy
- 网址: https://www.yingjoy.cn/
- 来源: https://github.com/rougier/numpy-100
- 全文: https://github.com/yingzk/100_numpy_exercises
接上文: 100个Numpy练习【1】 接上文: 100个Numpy练习【2】
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. 创建一个结构化数组,其中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_{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())
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- esp8266+oled+DHT 11温湿度显示
- esp8266+oled 显示时间日期
- esp8266+DHT11温湿传感器 制作web室内温度计
- Linux端口转发的几种常用方法
- kali破解wifi密码
- 面向对象的7种设计原则(7)-开闭原则
- [数据库介绍]一站式表达谱数据分析
- windows下hashcat利用GPU显卡性能破解密码
- TCGAG多组学联合分析数据库
- Docker安装及使用
- CVE-2020-0796漏洞复现(RCE)
- Jenkins持续集成平台安装
- mysql架构备份之M-S-S级联复制
- Docker构建lnmp环境部署typecho
- MANJARO KDE安装配置(已换Arch Linux,此贴可能废弃)