【Numpy】练习题100道(26-50题)

#学习笔记#

在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。

Git-hub链接

1.题目列表

26. 下面的脚本输出什么?(★☆☆)
print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))
27. 考虑一个整数向量Z,以下哪些表达式是合法的?(★☆☆)
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))(无拷贝)?(★★☆)
36. 使用4种不同的方法提取正数随机数组的整数部分 (★★☆)
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. 创建一个结构化数组,包含覆盖[0,1]x[0,1]区域的xy坐标 (★★☆)
47. 给定两个数组,X和Y,构造柯西矩阵C (Cij =1/(xi - yj)) (★★☆)
48. 打印每种numpy标量类型的最小和最大可表示值 (★★☆)
49. 如何打印数组的所有值?(★★☆)
50. 如何在向量中找到(给定标量的)最接近的值?(★★☆)

2.题解

26. 下面的脚本输出什么?(★☆☆)
print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))

 1.输出9
2.输出10
解释:在导入numpy库前,sum的第二个参数的作用是初始值,所以相当于:-1 + 0 + 1 + 2 + 3 + 4
注意,这是初始值不是起始值,如果是sum(range(2,5),-1),实际上是: -1 + 2 + 3 + 4 

第二个print输出的是10,在导入了NumPy之后,使用的sum函数实际上是numpy.sum,而不是内置的sum。在NumPy的sum函数中,第二个参数(在这个案例中是-1)不是初始值,而是指定求和操作应该沿着哪个轴进行。当使用-1作为轴参数时,它指的是数组的最后一个轴。

27. 考虑一个整数向量Z,以下哪些表达式是合法的?(★☆☆)
Z**Z
2 << Z >> 2
Z <- Z
1j*Z
Z/1/1
Z<Z>Z
# 1.Z**Z是合法的,它表示Z的Z对应元素的次方
Z = np.array([1,2,3,4,5])
# Z**Z
# 输出:[1,4,27,256,3125]

# 2.2 << Z >> 2是合法的,它表示Z的每个元素向左移动2位,再向右移动2位
2 << Z >> 2
# 输出:[1,2,4,8,16]

# 3.Z <- Z是合法的,表示检查Z中的每个元素是否小于-Z结果是一个布尔数组
Z <- Z
# 输出:[False False False False False]

# 4.1j*Z是合法的,它表示将每个元素的实部和虚部分别相乘
1j*Z
# 输出:[0.+1.j 0.+2.j 0.+3.j 0.+4.j 0.+5.j]

# 5.Z/1/1是合法的,它表示将Z的每个元素除以1
Z/1/1
# 输出:[1. 2. 3. 4. 5.]

# 6.Z<Z>Z不合法,在python中不能直接将比较运算符连续使用而不进行逻辑组合应当使用and  or 连接
28. 下列表达式的结果是什么?(★☆☆)
np.array(0) / np.array(0) 
np.array(0) // np.array(0) 
np.array([np.nan]).astype(int).astype(float)
np.array(0) / np.array(0)
# 会得到一个运行时警告,并且结果将是NaN(not a number)
# 因为在Numpy中除以0会产生一个无穷大的浮点数表示(inf),而当0除以0时,无法定义确切的数值,因此结果会被表示为NaN
# NaN表示不是一个数字,它是一个特殊的浮点数类型,用于表示浮点数计算中的错误情况。
# 值得注意的是,这是numpy的行为,而不是python内置出发运算符的行为。在python中,0除以0会抛出一个ZeroDivisionError异常。
np.array(0) // np.array(0)
# 会得到一个运行时警告,并且结果将是0
# 因为在Numpy中,整数除以整数的结果是一个整数,所以0除以0的结果是0,这只适用于整数除法,对于浮点数除法,结果仍然会是NaN
np.array([np.nan]).astype(int).astype(float)
# 会得到一个警告,结果是:-2.147484e+09
# 在numpy中,np.nan是一个特殊的浮点数类型,转化为整数时会得到一个负无穷大的整数值,而后转化为浮点数时,会得到一个浮点数能表示的最小数值
29. 如何将浮点数组向零的反方向四舍五入?(★☆☆) 
# 远离零点四舍五入可以使用numpy的'np.ceil'对正数和‘np.floor’对负数进行处理来表示,
# 反方向四舍五入,1.4得2,-1.1得-2,1.5得2,-1.6得-2
np.random.seed = 1
Z = np.array([1.523127,-0.973028,1.488869,1.135266,1.706664,-1.815817,0.917672,-0.813865,-0.270150,0.310724])
def round_away_from_zero(arr):
    # 对正数使用np.ceil,对负数使用np.floor
    return np.where(arr > 0, np.ceil(arr), np.floor(arr))

round_away_from_zero(Z)
# 输出:[2.,-1.,2.,2.,2.,-2.,1.,-1.,-1.,1.]
30. 如何找到两个数组中的公共值?(★☆☆) 
# 可以使用Numpy的'np.intersect1d'函数来找到两个数组的交集
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([4, 5, 6, 7, 8])
common_values = np.intersect1d(arr1, arr2)
print(common_values)
31. 如何忽略所有numpy警告(不推荐)?(★☆☆)
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
32. 下面的表达式是否为真?(★☆☆)
np.sqrt(-1) == np.emath.sqrt(-1)

 不为真

np.sqrt: 当给定非负输入时,这个函数正常工作,返回输入的平方根。如果输入是负数,np.sqrt 会返回一个NaN(非数字),因为在实数范围内,负数没有平方根。
np.emath.sqrt: 这个函数专门用于处理更广泛的数学问题,包括负数的平方根。对于负数输入,np.emath.sqrt 返回一个复数结果。例如,np.emath.sqrt(-1) 会返回虚数单位 1j,这是因为在复数域中,负一的平方根被定义为虚数单位。
33. 如何获取昨天、今天和明天的日期?(★☆☆)
# 可以使用Numpy的'numpy.datetime64'和'numpy.timedelta64'对象来获取昨天、今天和明天的日期
today = np.datetime64('today', 'D') # 获取今天的日期
yesterday = today - np.timedelta64(1, 'D') # 获取昨天的日期
tomorrow = today + np.timedelta64(1, 'D') # 获取明天的日期
print("Today:", today)
print("Yesterday:", yesterday)
print("Tomorrow:", tomorrow)
# 输出结果:
# Today: 2024-03-14
# Yesterday: 2024-03-13
# Tomorrow: 2024-03-15
34. 如何获取2016年7月的所有日期?(★★☆)
# 可以使用numpy的date_range函数配合numpy.datetime64来获取2016年7月的所有日期
dates_july_2016 = np.arange('2016-07-01', '2016-08-02', dtype = 'datetime64[D]')
35. 如何就地计算((A+B)*(-A/2))(无拷贝)?(★★☆)
# 就地计算无拷贝意味着无新的空间被分配,计算结果直接覆盖了原始数据。
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8, 9], [10, 11, 12]])

B = A + B
B = B * -A / 2
print(B)
# 输出:[[ -4. -10. -18.]
#         [-28. -40. -54.]]
36. 使用4种不同的方法提取正数随机数组的整数部分 (★★☆)
A = np.random.rand(3, 4)
# 方法1: 使用np.floor函数.np.floor函数会向下取整,适用于正数
A_int_floor = np.floor(A)
# 方法2:使用np.trunc函数.np.trunc函数会截断小数部分,保留整数部分
A_int_trunc = np.trunc(A)
# 方法3:使用astype方法转换为整数类型
A_int_astype = A.astype(int)
# 方法4:使用np.round函数.np.round函数会四舍五入取整
A_int_round = np.round(A)
37. 创建一个5x5的矩阵,其行值范围从0到4 (★★☆)
# 整数
random_matrix = np.random.randint(0, 5, size=(5, 5))     # 在random.randint中,前两个参数控制生成的范围,size 是控制数组形状
# 浮点数
random_matrix_float = np.random.rand(5,5) * 4      # 在random.rand中,与randint不同,是控制形状的,因为其会默认生成0-1之间的随机浮点数
38. 考虑一个生成10个整数的生成器函数,并用它构建一个数组 (★☆☆)
random_matrix = np.random.randint(0, 10, size=(10,))
39. 创建一个大小为10的向量,值从0到1,不包括0和1 (★★☆)
# 可以直接使用np.random.rand函数生成,然后使用一些方法来控制其范围
vec = np.random.rand(10) * (1 - 0.02) + 0.01
40. 创建一个大小为10的随机向量并对其进行排序 (★★☆)
random_vec = np.random.rand(10)
sorted_vec = np.sort(random_vec)
41. 如何比np.sum更快地对小数组求和?(★★☆)
# 一般情况下,使用np.sum函数即可,如果追求更优可以使用np.einsum函数,其内部使用BLAS库来加速计算
import time

array = np.random.rand(1000000)
start = time.time()
np.sum(array)
end = time.time()
print('sum方法:',end - start)

start1 = time.time()
np.einsum('i->',array)
end1 = time.time()
print('einsum方法:',end1 - start1)
# 输出结果:
# sum方法: 0.0010001659393310547
# einsum方法: 0.00099945068359375
42. 考虑两个随机数组A和B,检查它们是否相等 (★★☆)
A = np.random.rand(5)
B = np.random.rand(5)
# 严格相等
# 检查A和B是否完全相等
are_equal = np.array_equal(A, B)
print("A和B完全相等:", are_equal)

# 近似相等
# 检查A和B是否近似相等
are_close = np.allclose(A, B, atol=1e-8)
print("A和B近似相等:", are_close)
43. 将一个数组设置为只读 (★★☆)
# 可以通过修改数组的flags.writeable属性来实现
# 创建一个随机数组
arr = np.random.rand(5)
# 打印原始数组
print("原始数组:", arr)
# 将数组设置为只读
arr.flags.writeable = False
# 尝试修改数组
try:
    arr[0] = 1
except ValueError as e:
    print("错误信息:", e)
# 输出结果:
# 原始数组: [0.60665849 0.58338168 0.69089184 0.66636523 0.22322251]
# 错误信息: assignment destination is read-only
44. 考虑一个随机的10x2矩阵表示笛卡尔坐标,将它们转换为极坐标 (★★☆)
# 在笛卡尔坐标系中的位置可以转换为极坐标系中的半径和角度
# 创建一个随机的10x2矩阵表示笛卡尔坐标
coords = np.random.rand(10, 2)

r = np.sqrt(np.sum(coords**2, axis=1))  # 计算每个坐标点的模
theta = np.arctan2(coords[:, 1], coords[:, 0])  # 计算每个坐标点的角度
polar_coords = np.column_stack((r, theta))

print('极坐标\n',polar_coords)
45. 创建大小为10的随机向量,并将最大值替换为0 (★★☆)
# 创建一个大小为10的随机向量
random_matrix = np.random.rand(10)
# 方法一
max_value = np.max(random_matrix)
random_matrix[random_matrix == max_value] = 0
# 方法二
max_index = np.argmax(random_matrix)
random_matrix[max_index] = 0
46. 创建一个结构化数组,包含覆盖[0,1]x[0,1]区域的xy坐标 (★★☆)
# 定义结构化数据类型,包含两个浮点数字段x和y
dtype = [('x', float), ('y', float)]

# 创建一个结构化数组来覆盖[0,1]x[0,1]区域
# 例如,我们可以创建一个4x4的网格
num_points = 4
x_values = np.linspace(0, 1, num_points)
y_values = np.linspace(0, 1, num_points)

# 使用网格的笛卡尔积来生成所有坐标点
grid = np.meshgrid(x_values, y_values)

# 组合x和y坐标点并创建结构化数组
coordinates = np.zeros(num_points*num_points, dtype=dtype)
coordinates['x'], coordinates['y'] = grid[0].flatten(), grid[1].flatten()

print("结构化数组的x和y坐标:")
print(coordinates)
47. 给定两个数组,X和Y,构造柯西矩阵C (Cij =1/(xi - yj)) (★★☆)
X = np.array([1, 2, 3, 4])
Y = np.array([4, 5, 6, 7])
# 将X变形为列向量,以便进行广播,利用广播机制可以有效避免显式编写嵌套循环
X  = X[:,np.newaxis]
C = 1.0/(X - Y)
print("柯西矩阵",C)
48. 打印每种numpy标量类型的最小和最大可表示值 (★★☆)
# 整数类型
integer_types = [np.int8, np.int16, np.int32, np.int64]
print("整数类型的最小和最大值:")
for int_type in integer_types:
    info = np.iinfo(int_type)
    print(f"{int_type.__name__:>10}: min = {info.min}, max = {info.max}")

# 浮点数类型
float_types = [np.float16, np.float32, np.float64]
print("\n浮点数类型的最小和最大正值(非精确值):")
for float_type in float_types:
    info = np.finfo(float_type)
    print(f"{float_type.__name__:>10}: min = {info.min}, max = {info.max}")
    print(f"{float_type.__name__:>10}: smallest normal = {info.tiny}, largest positive = {info.max}")

# 特殊注意:对于浮点数,最小值表示最小的正规化的浮点数。
# 浮点数还有更小的非正规化数,但它们具有较小的精度。
49. 如何打印数组的所有值?(★★☆)
# 默认情况下,大数组的打印都会被截断,可以使用numpy.set_printoptions函数来调整打印选项
# 通过设置参数'threshold'为numpy.inf,可以打印出所有元素
np.set_printoptions(threshold=np.inf)
large_array = np.random.rand(10000)
print(large_array)
50. 如何在向量中找到(给定标量的)最接近的值?(★★☆)
# 可以通过计算数组中每个元素与该标量的绝对差值,然后找到这些差值中最小的那个
x = np.random.randint(1,1000,size = 100)
target = 888

x_ = np.abs(x - target)

result = x[x_ == x_.min()]
print(result)

后续会更行全部100题

以上

学习在于行动,总结和坚持,共勉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460045.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

检查1个变量是否对另1个变量是否有显著影响

from&#xff1a;SPSS系列|手把手教你做卡方检验 - 知乎 (zhihu.com) 什么时候用&#xff1f; 实例学习 SPSS系列|手把手教你做卡方检验 - 知乎 (zhihu.com)

YOLOv8 | 有效涨点,添加GAM注意力机制,使用Wise-IoU有效提升目标检测效果(附报错解决技巧,全网独家)

目录 摘要 基本原理 通道注意力机制 空间注意力机制 GAM代码实现 Wise-IoU WIoU代码实现 yaml文件编写 完整代码分享&#xff08;含多种注意力机制&#xff09; 摘要 人们已经研究了各种注意力机制来提高各种计算机视觉任务的性能。然而&#xff0c;现有方法忽视了…

Paimon新版本核心特性和生产实践解读

最近Apche Paimon发布了最新版本0.7.0&#xff0c;在这个版本中&#xff0c;Paimon对一些新特性进行了增强。 Paimon在数据湖领域发展迅速&#xff0c;未来会在整个数据开发领域占有很重要的地位&#xff0c;今天我们来盘点一下当前能力的特点以及在生产环境中的使用情况。 Loo…

【C++】手撕AVL树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能直接手撕AVL树。 > 毒鸡汤&#xff1a;放弃自…

react-native使用FireBase实现google登陆

一、前置操作 首先下载这个包 yarn add react-native-google-signin/google-signin 二、Google cloud配置 Google Cloud 去google控制台新建一个android项目&#xff0c;这时候需要用到你自己创建的keystore的sha1值&#xff0c;然后会让你下载一个JSON文件&#xff0c;先保…

【Linux进阶之路】HTTPS = HTTP + S

文章目录 一、概念铺垫1.Session ID2.明文与密文3.公钥与私钥4.HTTPS结构 二、加密方式1. 对称加密2.非对称加密3.CA证书 总结尾序 一、概念铺垫 1.Session ID Session ID&#xff0c;即会话ID&#xff0c;用于标识客户端与服务端的唯一特定会话的标识符。会话&#xff0c;即客…

某鱼弹幕逆向

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018…

Delft3D建模、水动力模拟方法及在地表水环境影响评价中的技术应用

​任博士&#xff0c;长期从事地表水数值模拟研究与实践工作&#xff0c;具有资深的技术底蕴和专业背景。 1、掌握Delft3D的建模流程&#xff0c;包括基础数据的准备、计算网格的制作、模型的调试与率定、计算结果的处理等&#xff0c;熟悉软件的基本操作。 2、熟悉Delft3D网…

java---网络初始

一.局域网和广域网 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成业务&#xff0c;就有了网络互连。 网络互连&#xff1a;将多台计算机连接在一起&#xff0c;完成数据共享。数据共享本质是网…

开发反应式API

开发反应式API 开发反应式API1 使用SpringWebFlux1.1 Spring WebFlux 简介1.2 编写反应式控制器 2 定义函数式请求处理器3 测试反应式控制器3.1 测试 GET 请求3.2 测试 POST 请求3.3 使用实时服务器进行测试 4 反应式消费RESTAPI4.1 获取资源4.2 发送资源4.3 删除资源4.4 处理错…

基于springboot+vue实现养老服务管理系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现养老服务管理系统演示 摘要 医疗水平和生活水平的不断提高造就了我们现在稳定、发展的社会&#xff0c;带来受益的同时也加重了人口老龄化程度。随着人口老龄化程度的不断加深&#xff0c;越来越多的社会资源在对养老方面注入。那么面对如此快速发展的养…

Go微服务实战——服务的注册与获取(nacos做服务注册中心)

背景 随着访问量的逐渐增大&#xff0c;单体应用结构渐渐不满足需求&#xff0c;在微服务出现之后引用被拆分为一个个的服务&#xff0c;服务之间可以互相访问。初期服务之间的调用只要知道服务地址和端口即可&#xff0c;而服务会出现增减、故障、升级等变化导致端口和ip也变…

在OpenStack架构中,Controller节点的配置(基础)

虚拟机的安装 新建虚拟机&#xff0c;选择自定义 默认选择即可 操作系统的镜像稍后选择 客户及操作系统选择Linux&#xff0c;注意选择centos 7 64位 给虚拟机命名 处理器的配置建议1&#xff1a;2 内存大小选择建议为&#xff1a;4GB 网络连接选择为&#xff1a;NAT 默认即可…

蓝桥杯2022年第十三届省赛真题-灭鼠先锋

LLLV solution1 必输&#xff1a;只有一个格子 手算可以模拟出来~ solution2 OOOO状态下&#xff0c;谁先下谁必输 》问题转化为谁先下满第一排&#xff0c;谁必赢&#xff0c;可以非常容易的模拟出来

Vue.js+SpringBoot开发天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

uniapp实现点击标签文本域中显示标签内容

先上一个效果图 实现的效果有&#xff1a; ①.点击标签时&#xff0c;标签改变颜色并处于可删除状态 ②.切换标签&#xff0c;文本域中出现标签的内容 ③.点击标签右上角的删除可删掉标签&#xff0c;同时清除文本域中标签的内容 ④.可输入内容&#xff0c;切换时不影响输入…

考研C语言复习进阶(5)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 ​编辑 ​编辑 4.1 对比一组函数&#xff1a; ​编辑 5. 文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind…

tomcat中把项目放在任意目录中的步骤

java web 项目由idea开发&#xff0c;路径如下图所示&#xff1a; 1.在tomcat安装目录conf\Catalina\localhost 里面&#xff0c;编写lesson1.xml文件内容如下&#xff1a; <Context path"/lesson1" docBase"C:\Users\信息技术系\Desktop\2024\学校工作\jav…

基于51单片机的微波炉温度控制器设计[proteus仿真]

基于51单片机的微波炉温度控制器设计[proteus仿真] 温度检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的微波炉温度控制器设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xff…

【矩阵】240. 搜索二维矩阵 II【中等】

搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22…