【Numpy】练习题100道(51-75题)

🌻个人主页:相洋同学
🥇学习在于行动、总结和坚持,共勉!

#学习笔记#

Git-hub链接

目录

1.题目列表

2.题解


1.题目列表

51. 创建一个表示位置(x,y)和颜色(r,g,b)的结构化数组(★★☆)

52. 考虑一个形状为(100,2)的随机向量,代表坐标,找出点对点的距离(★★☆)

53. 如何将一个浮点(32位)数组就地转换为整数(32位)数组?

54. 如何读取以下文件?(★★☆)

1, 2, 3,4, 5 6,, , 7, 
8 , , 
9,10,11

55. 对于numpy数组,有什么等同于enumerate的函数?(★★☆)

56. 生成一个通用的2D高斯样数组(★★☆)

57. 如何在一个2D数组中随机放置p个元素?(★★☆)

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

59. 如何按照第n列排序一个数组?(★★☆)

60. 如何判断一个给定的2D数组是否有空列?(★★☆)

61. 在一个数组中找到最接近给定值的数(★★☆)

62. 考虑两个形状分别为(1,3)和(3,1)的数组,如何使用迭代器计算它们的和?(★★☆)

63. 创建一个具有name属性的数组类(★★☆)

64. 考虑一个给定的向量,如何给由第二个向量索引的每个元素加1(注意重复索引)?(★★★)

65. 如何根据索引列表(I)将向量(X)的元素累加到一个数组(F)中?(★★★)

66. 考虑一个(w,h,3)形状的图像(dtype=ubyte),计算唯一颜色的数量(★★☆)

67. 考虑一个四维数组,如何一次性获得最后两轴的和?(★★★)

68. 考虑一维向量D,如何使用描述子集索引的同大小向量S来计算D的子集均值?(★★★)

69. 如何获得点积的对角线?(★★★)

70. 考虑向量[1, 2, 3, 4, 5],如何构建一个新向量,在每个值之间插入3个连续的零?(★★★)

71. 考虑一个维度为(5,5,3)的数组,如何将其乘以一个维度为(5,5)的数组?(★★★)

72. 如何交换数组的两行?(★★★)

73. 考虑一组描述10个三角形(具有共享顶点)的10个三元组,找到组成所有三角形的唯一线段集(★★★)

74. 给定一个对应于bincount的排序数组C,如何产生一个数组A使得np.bincount(A) == C?(★★★)

75. 如何使用数组上的滑动窗口计算平均值?(★★★)

2.题解

 51. 创建一个表示位置(x,y)和颜色(r,g,b)的结构化数组(★★☆)

dtype = [('position',[('x',float),('y',float)]),('color',[('r',int),('g',int),('b',int)])]position_and_color = np.zeros(10,dtype=dtype)
position_and_color['position']['x'] = np.random.uniform(0,100,10)
position_and_color['position']['y'] = np.random.uniform(0,100,10)
position_and_color['color']['r'] = np.random.randint(0,256,10)
position_and_color['color']['g'] = np.random.randint(0,256,10)
position_and_color['color']['b'] = np.random.randint(0,256,10)

52. 考虑一个形状为(100,2)的随机向量,代表坐标,找出点对点的距离(★★☆)

points = np.random.rand(100,2) # 表示100个点的坐标
diff = points[:,np.newaxis,:] - points[np.newaxis,:,:] # 计算点与点之间的距离,这里我们扩展了维度使得每一个点都和原来的点有比较 
distance = np.linalg.norm(diff,axis=-1) # 计算每一对点之间的距离,linalg就是计算的范数,计算的是一个向量所有元素的平方,和,然后开根
distance # 100个点会产生10000个距离

53. 如何将一个浮点(32位)数组就地转换为整数(32位)数组?

float_array = np.array([1.2,1.3,2.3,2.4,2.4],dtype=np.float32)
int_array = float_array.astype(np.int32)

54. 如何读取以下文件?(★★☆)

1, 2, 3,4, 5 6,, , 7, 
8 , , 
9,10,11
# 读取文件
# 'data.csv' 是文件路径,dtype = float 指定数组的数据类型,delimiter = ',' 指定分隔符
# missing_value = ' ' 指定缺失值,如果文件中缺失值用空格表示,那么这里可以指定为空格
data = np.genfromtxt('data.csv',dtype=float,delimiter=',',missing_value=' ',filling_values=np.nan)
# filling_values 指定缺失值被替换的值,这里我们用NaN表示

55. 对于numpy数组,有什么等同于enumerate的函数?(★★☆)

arr = np.array([[1,2],[3,4]])for index,value in np.ndenumerate(arr):print(index,value)
# 输出结果:
# (0, 0) 1
# (0, 1) 2
# (1, 0) 3
# (1, 1) 4

56. 生成一个通用的2D高斯样数组(★★☆)

def generate_2d_gaussian(size, sigma):"""生成一个给定大小和标准差的 2D 高斯核,包含归一化常数。"""# 生成 x 和 y 的坐标x, y = np.meshgrid(np.linspace(-size // 2, size // 2, size), np.linspace(-size // 2, size // 2, size))# 计算高斯函数,包含归一化常数g = (1 / (2 * np.pi * sigma**2)) * np.exp(-(x**2 + y**2) / (2 * sigma**2))# 归一化,使所有值的和为 1g /= g.sum()return g# 示例:生成一个 5x5 大小,标准差为 1 的高斯核
gaussian_kernel = generate_2d_gaussian(5, 1)

57. 如何在一个2D数组中随机放置p个元素?(★★☆)

def place_elements_randomly(shape,p,value=1):'''在给定形状的2D数组中随机放置p个元素,默认为1:param shape:一个元组,制定了2D数组的形状:param p:整数,指定要放置的元素个数:param value:要放置的元素的值,默认为1:return:修改后的2D数组'''# 创建初始数组arr = np.zeros(shape,dtype=int)# 计算所有可能可能的位置all_positions = np.arange(arr.size)# 随机选择p个不重复的位置chosen_positions = np.random.choice(all_positions,p,replace=False)# 在选定的位置放置元素np.put(arr,chosen_positions,value)return arr

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

arr = np.array([[0,1,2],[1,1,1],[2,2,2]])
arr.mean(axis=1)
arr_mean = arr - arr.mean(axis=1,keepdims=True)

59. 如何按照第n列排序一个数组?(★★☆)

arr = np.array([[0,1,2],[1,1,1],[2,2,2]])
arr[arr[:,2].argsort()]
# argsort()返回的是数组中元素的索引,argsort()默认是升序排序

60. 如何判断一个给定的2D数组是否有空列?(★★☆)

arr = np.array([[1,2,3],[4,5,6],[7,8,np.nan]])
np.isnan(arr).any(axis=0)
# .any()相当于or的操作,加上axis=0,表示判断每一列

61. 在一个数组中找到最接近给定值的数(★★☆)

arr = np.array([4, 2, 9, 6, 10, 1])
target = 8
arr[(np.abs(arr-target)).argmin()]
# .argming()返回的是数组中最小元素的索引

62. 考虑两个形状分别为(1,3)和(3,1)的数组,如何使用迭代器计算它们的和?(★★☆)

# 定义两个数组
a = np.array([[1, 2, 3]])
b = np.array([[1], [2], [3]])# 手动广播到共同形状
a_broadcasted, b_broadcasted = np.broadcast_arrays(a, b)
# np.broadcast_arrays()会返回输入数组的广播版本列表,这些返回的数组试图表面看似具有相同的形状# 创建一个空数组用于存放结果,形状与广播后的数组相同
result = np.empty(a_broadcasted.shape, dtype=a_broadcasted.dtype)# 使用迭代器逐元素计算和
it = np.nditer([a_broadcasted, b_broadcasted, result], [], [['readonly'], ['readonly'], ['writeonly', 'allocate']])
for x, y, z in it:z[...] = x + yresult

63. 创建一个具有name属性的数组类(★★☆)

class NamedArray(np.ndarray):def __new__(cls,input_array,name=''):# 使用__new__方法创建对象.因为np.darry是不可变的# 我们需要在对象被创建时设置obj = np.asarray(input_array).view(cls)obj.name = namereturn objdef __array_finalize__(self,obj):# __array_finalize__方法在对象被创建时被调用# 用来设置属性,这里确保name属性也会被复制if obj is None:returnself.info = getattr(obj,'name', '')

64. 考虑一个给定的向量,如何给由第二个向量索引的每个元素加1(注意重复索引)?(★★★)

# 可以使用Numpy的'np.add.at'方法,这个方法允许对数组的特定索引执行就地操作,或直接修改原数组
# 当遇到重复索引时,会对每个重复的索引都进行操作# 定义原始向量
v = np.array([1, 2, 3, 4, 5])# 定义索引向量,可能包含重复的索引
i = np.array([0, 1, 2, 1, 3, 3, 4])# 使用 np.add.at 对 v 的指定索引进行加 1 操作
np.add.at(v, i, 1)print(v)

65. 如何根据索引列表(I)将向量(X)的元素累加到一个数组(F)中?(★★★)

# 同样使用np.add.at方法,这个方法允许对数组的特定索引执行就地操作,或直接修改原数组# 定义向量 X
X = np.array([1.1, 2.2, 3.3, 4.4, 5.5])# 定义索引列表 I
I = np.array([0, 1, 2, 1, 3])# 定义目标数组 F,假设我们想要累加到的数组有 5 个元素,初始化为 0
F = np.zeros(5)# 使用 np.add.at 根据索引 I 将 X 的元素累加到 F 中
np.add.at(F, I, X)print(F)

66. 考虑一个(w,h,3)形状的图像(dtype=ubyte),计算唯一颜色的数量(★★☆)

# 假设 img 是一个 (w,h,3) 形状的图像数组,这里使用随机数据来模拟一个图像
w, h = 100, 100  # 图像的宽度和高度
img = np.random.randint(0, 256, size=(w, h, 3), dtype=np.ubyte)  # 生成一个模拟图像# 将图像数组重塑为 (w*h, 3)
reshaped_img = img.reshape((-1, 3))# 将重塑后的数组视为含有多个字段的结构化数组,使 np.unique 能按三元组处理
unique_colors = np.unique(reshaped_img.view([('', reshaped_img.dtype)]*3), axis=0)# 计算唯一颜色的数量
num_unique_colors = unique_colors.shape[0]print("Number of unique colors:", num_unique_colors)

67. 考虑一个四维数组,如何一次性获得最后两轴的和?(★★★)

# 创建一个四维数组
arr = np.arange(48).reshape((2, 3, 4, 2))# 计算最后两个轴的和
sum_last_two_axes = np.sum(arr, axis=(-2, -1))print(sum_last_two_axes)

68. 考虑一维向量D,如何使用描述子集索引的同大小向量S来计算D的子集均值?(★★★)

# 使用布尔索引 D[S] 来选择向量 D 中与 S 中对应为 True 的元素。然后,我们使用 np.mean 函数计算所选子集的平均值。
D = np.array([1, 2, 3, 4, 5])
S = np.array([True, False, True, False, True])subset_mean = np.mean(D[S])print(subset_mean)

69. 如何获得点积的对角线?(★★★)

# 可以使用 NumPy 的 np.einsum 函数来计算两个数组的点积,并同时获取点积结果的对角线。
# 创建两个数组
a = np.array([[1, 2, 3],[4, 5, 6]])b = np.array([[7, 8],[9, 10],[11, 12]])# 计算点积并获取对角线
dot_product_diagonal = np.einsum('ij,ji->i', a, b)print(dot_product_diagonal)

70. 考虑向量[1, 2, 3, 4, 5],如何构建一个新向量,在每个值之间插入3个连续的零?(★★★)

# 使用 np.insert 函数将 zero_vector 插入到原始向量的特定位置。我们使用 np.arange(1, len(original_vector) + 1) * 4 - 1 来生成要插入的位置索引,这样就能在每个原始值之后插入 3 个连续的零。
# 原始向量
original_vector = np.array([1, 2, 3, 4, 5])# 零向量
zero_vector = np.zeros(3 * len(original_vector))# 构建新向量
new_vector = np.insert(original_vector, np.arange(1, len(original_vector) + 1) * 4 - 1, zero_vector)print(new_vector)

71. 考虑一个维度为(5,5,3)的数组,如何将其乘以一个维度为(5,5)的数组?(★★★)

# 使用广播功能,将维度为 (5,5) 的数组 arr_2d 扩展为维度为 (5,5,1) 的数组,以便与维度为 (5,5,3) 的数组 arr_3d 进行逐元素乘法。这是通过 arr_2d[:, :, np.newaxis] 实现的。
# 创建一个维度为 (5,5,3) 的数组
arr_3d = np.random.randint(1, 10, size=(5, 5, 3))# 创建一个维度为 (5,5) 的数组
arr_2d = np.random.randint(1, 5, size=(5, 5))# 对数组进行乘法运算
result = arr_3d * arr_2d[:, :, np.newaxis]print(result)

72. 如何交换数组的两行?(★★★)

# 可以通过直接交换行的索引来实现
# 创建一个数组
arr = np.arange(25).reshape((5, 5))# 交换第一行和第三行
arr[[0, 2]] = arr[[2, 0]]print(arr)

73. 考虑一组描述10个三角形(具有共享顶点)的10个三元组,找到组成所有三角形的唯一线段集(★★★)

# 假设 triangles 是一个包含 10 个三元组的数组,每个三元组代表一个三角形的三个顶点
# 这里用随机数据生成一个示例
np.random.seed(0)  # 保证可重复性
triangles = np.random.randint(1, 100, (10, 3))# 生成线段
# 每个三角形由三个顶点组成,因此有三个线段:(v1, v2), (v2, v3), (v1, v3)
segments = np.vstack([triangles[:, [0, 1]], triangles[:, [1, 2]], triangles[:, [0, 2]]])# 标准化线段,确保每个线段的起点小于终点
segments = np.sort(segments, axis=1)# 去除重复的线段
unique_segments = np.unique(segments, axis=0)print("Unique segments:")
print(unique_segments)

74. 给定一个对应于bincount的排序数组C,如何产生一个数组A使得np.bincount(A) == C?(★★★)

# bincount用来计算整数数组中各个元素的频率
# 给定的排序数组 C,表示 np.bincount 的结果
C = np.array([0, 2, 1, 0, 4])# 产生数组 A
A = np.repeat(np.arange(len(C)), C)print("Generated Array A:", A)

75. 如何使用数组上的滑动窗口计算平均值?(★★★)

#首先定义了一个简单的数组 a 和一个窗口大小 N。然后,我们创建了一个均匀的权重数组 window,其所有元素之和为 1。最后,我们通过 np.convolve 函数与这个窗口进行卷积,计算滑动平均值。
# 示例数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 窗口大小
N = 3# 创建一个等于滑动窗口大小的均匀权重数组
window = np.ones(N) / N# 计算滑动平均值
# mode='valid' 意味着只计算完全覆盖数组的窗口位置
# 这会导致输出数组的大小比输入数组小
moving_average = np.convolve(a, window, mode='valid')print(moving_average)

后续会更行全部100题,欢迎关注

以上

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了,那么一直重新生成食物,直到生成不冲突…

19双体系Java学习之数组的Arrays类

数组的Arrays类 ★小贴士 sort方法对数组进行排序,方法调用完成后,数组按升序排列。 binarySearch方法对数组进行二分查找,如果能找到需要查找的元素则返回该元素的下标,否则返回一个负数,详见binarySearch的范例代码。…

如何将Excel两列数据转换为统计图、曲线图、折线图?如何自定义某一列作为Excel的统计图横纵坐标?

这样,横坐标就更换为指定选中的数据了 我们还可以修改统计图的样式 也可以修改统计图的类型

代码随想录算法训练营第41天 | 01背包问题(二维+一维) ,416. 分割等和子集

动态规划章节理论基础: https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 01背包理论基础 链接:https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%…

redis学习-List类型相关命令以及特殊情况分析

目录 1. lpush key value1 value2 ... 2. lrange key start end 3. lpop key num 4. rpush key value1 value2 ... 5. rpop key num 6. lindex key index 7. llen key 8. lrem key num value 9. rpoplpush key1 key2 10. lset key index value 11. linsert key before/after…

Python基础算法解析:支持向量机(SVM)

支持向量机(Support Vector Machine,SVM)是一种用于分类和回归分析的机器学习算法,它通过在特征空间中找到一个最优的超平面来进行分类。本文将详细介绍支持向量机的原理、实现步骤以及如何使用Python进行编程实践。 什么是支持向…

栈与队列|150.逆波兰表达式求值

力扣题目链接 class Solution { public:int evalRPN(vector<string>& tokens) {// 力扣修改了后台测试数据&#xff0c;需要用longlongstack<long long> st; for (int i 0; i < tokens.size(); i) {if (tokens[i] "" || tokens[i] "-&qu…

南卡罗来纳州历史和文化经济地理和自然政治和社会教育1. 加州大学公布2024年秋季入学新生和转学申请数据2. 2024考研国家线公布路德会信徒核心信仰礼拜和

目录 南卡罗来纳州 历史和文化 经济 地理和自然 政治和社会 教育 1. 加州大学公布2024年秋季入学新生和转学申请数据 2. 2024考研国家线公布 路德会信徒 核心信仰 礼拜和实践 分布 社会和文化影响 约翰塞巴斯蒂安巴赫 生平简介 音乐风格和作品 遗产和影响 …

【Spring 篇】SpringMVC拦截器:给你的应用增添色彩

嗨&#xff0c;亲爱的小伙伴们&#xff01;欢迎来到这段关于SpringMVC拦截器的奇妙之旅。今天我们要一探究竟&#xff0c;深入挖掘拦截器的神秘面纱&#xff0c;看看它是如何在你的应用中悄然发挥作用的。别怕&#xff0c;我会用最通俗易懂的语言&#xff0c;一步一步带你走进这…

银行合规线上知识竞赛活动方案

合规知识大闯关 作为全国竞赛氛围预热项目&#xff0c;组织市县中心、代理网点人员参与合规知识大闯关答题。 1.建立线上答题平台&#xff0c;参与人通过手机、电脑等方式&#xff0c;填写个人基本信息登录。 2.答题平台在题库中随机抽取试题。 3.参与人在出现第一次答错后&…

spring boot nacos注册微服务示例demo_亲测成功

spring boot nacos注册微服务示例demo_亲测成功 先安装好Nacos Nacos安装使用 创建Maven项目 结构如图 例如项目名为: test-demo 下面有个子模块: test-demo-data-process 父模块pom.xml <?xml version"1.0" encoding"UTF-8"?> <project …

基于VJ算法(Viola-Jones algorithm)的人面定位算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

二、yocto 集成ros2(基于raspberrypi 4B)

yocto 集成ros2 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第二篇文章。 上一小节已经使用yocto编译出了raspberrypi 4B的image。并且成功刷机并且启动登陆&#xff1a; 一、yocto 编译raspberrypi 4B并启动 本节我们将ros2机器人操作系统移植到我们的yocto系统里面。…

应对磁盘管理挑战:Linux磁盘分区挂载命令实践指南

前言 在今天的技术世界中&#xff0c;Linux已成为广泛使用的操作系统之一&#xff0c;而对于运维人员和开发人员来说&#xff0c;磁盘分区挂载是一个至关重要的任务。正确地管理和配置磁盘分区挂载可以极大地提升系统的性能和可靠性&#xff0c;同时也能确保数据的安全性。 通…

如何在 Linux ubuntu 系统上搭建 Java web 程序的运行环境

如何在 Linux ubuntu 系统上搭建 Java web 程序的运行环境 基于包管理器进行安装 Linux 会把一些软件包放到对应的服务器上&#xff0c;通过包管理器这样的程序&#xff0c;来把这些软件包给下载安装 ubuntu系统上的包管理器是 apt centos系统上的包管理器 yum 注&#xff1a;…

Rabbit MQ详解

写在前面,由于Rabbit MQ涉及的内容较多&#xff0c;赶在春招我个人先按照我认为重要的内容进行一定总结&#xff0c;也算是个学习笔记吧。主要参考官方文档、其他优秀文章、大模型问答。自己边学习边总结。后面有时间我会慢慢把所有内容补全&#xff0c;分享出来也是希望可以给…

CSS学习(1)-选择器

一、基本选择器 1. 通配选择器 作用&#xff1a;可以选中所有的 HTML 元素。 语法&#xff1a; * { 属性名: 属性值; }举例&#xff1a; /* 选中所有元素 */ * { color: orange; font-size: 40px; }主要用于&#xff1a;清除样式。 2. 元素选择器 作用&#xff1a;为页面…

如何引入ElementUI组件库,快速上手Element

前言&#xff1a;在上篇文章中分享了如何快速上手Vue框架项目&#xff0c;本篇文章则介绍的是Element的使用&#xff0c;通过本篇文章的分享&#xff0c;我们就可以将Vue和Element结合使用&#xff0c;快速构建出精美的网页界面 目录 一.Element和ElementUI 二.如何引入Eleme…

leetcod 685. 冗余连接 II

久违的没做太出来的题目&#xff0c;leetcod 685. 冗余连接 II 题目 在本问题中&#xff0c;有根树指满足以下条件的 有向 图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点&#xff0c;而根节点没有…

关于Oracle Primavera P6的各数据库帐号用途

在使用/维护P6时&#xff0c;经常会用到各种不同的P6数据库用户&#xff0c;如在连接配置P6 Professional时用到的公共帐号pubuser&#xff0c;进入后台维护p6配置信息(adminpv)或开发常连接的privuser&#xff0c;亦或是配置BI Report/BUSINESS Intelligence报表套件用到的pxr…