Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】

文章目录

  • 题目描述
  • 代码实现
  • 关于本题涉及到的几个函数
    • randint()
    • where()
    • cumsum()
  • 题目拓展
    • 题目描述
    • 代码实现
  • 题目拓展
    • 题目描述
    • 代码实现
    • argmax()


题目描述

从前有一个酒鬼,喝醉了行走在一条直线上,每走一步方向是不确定的(向前或者向后),当他走了2000步后,试求终点距离原点的距离。


代码实现

# 酒鬼走了2000步,终点和原点的距离
step = 2000
draw = np.random.randint(0, 2, size=step)  # 随机生成2000步
direction_step = np.where(draw > 0, 1, -1)  # 向前走一步记作1,向后走一步记作-1
distance = direction_step.cumsum()  # 使用cumsum()函数计算步数的累计和,也就是距原点的距离
result = distance[step - 1]  # 用result保存终点距离原点的结果
if result > 0:print("最终较之原点向前走了:", result, "步")
else:print("最终较之原点向后走了:", abs(result), "步")

关于本题涉及到的几个函数

randint()

格式:randint(low, high=None, size=None, dtype=None)

作用:从指定的dtype以“离散均匀”分布的方式在“前闭后开”的区间[ low,high )中返回随机整数。如果 high为None(默认值),则结果来自[0,low)。

例子:

在这里插入图片描述


where()

格式:where(condition, x=None, y=None)

也可写成:where(condition, [x, y])

作用:Return elements chosen from x or y depending on condition.

简单来讲,condition作为判断条件,为True则产生x,否则产生y

例子
在这里插入图片描述


cumsum()

cumsum是数组统计运算中的方法,作用为:计算所有元素的累计和

格式:cumsum(self, axis=None, dtype=None, out=None)

作用:Return the cumulative sum of the elements along the given axis.

人话就是:根据所给轴——axis的值,进行累计和计算

结合例子来看:

在这里插入图片描述
在这里插入图片描述
根据上图我们可以知道,axis=None时,将数组平铺展开,当成一维数组,然后从第二个元素开始,执行a[i]=a[i]+a[i-1]+…+a[0](i>=1)的操作,axis=0时,沿着行的方向垂直向下竖着加axis=1时,沿着列的方向水平延申横着加

在cumsum的各个参数中,axis决定了累加的方式,而dtype决定了结果的数据类型,而out则是放置结果的备用输出数组,它的形状和缓冲区长度必须与预期的输出相同,如有必要,将强制转换类型,当out=None时,结果放置在当前数组中,覆盖之前数组中的值

PS:关于axis的详细解析,请移步搞清axis的含义,这一篇就够了!


题目拓展

题目描述

在上一题的基础上,我们要计算这个过程中,酒鬼距原点最远的距离是多少?

代码实现

没什么难点,主要就是要记得兼顾向前走和向后走两种情况,避免忽略边缘值
distancemax = distance.max()  # 向前走最远的距离
distancemin = distance.min()  # 向后走最远的距离
if abs(distancemin) < distancemax:  
# 由于向后走的距离是负数,所以要取其绝对值与向前走的距离相比较print("整个过程中距离原点最远的距离是向前走了:", distancemax, "步")
else:print("整个过程中距离原点最远的距离是向后走了:", abs(distancemin), "步")

题目拓展

题目描述

基于原始题目,尝试计算当第一次距原点的距离大于等于20米时,他总共走了多少步,设每步步长1.5米

代码实现

仍然是需要注意向后走、向前走两种情况
steps = 20 / 1.5  # 将距离20米转换为步数,存储到steps中
walk = (np.abs(distance) >= steps).argmax()
# (np.abs(distance) >= steps)返回的是一个布尔数组
# 故需要用argmax从满足条件的布尔数组中返回最大值的索引
print("当酒鬼走了", walk, "步时,此时距离原点的长度是大于或者等于20米的")

argmax()

格式:argmax(a, axis=None, out=None)

作用:Returns the indices of the maximum values along an axis.

说人话就是:返回沿轴的最大值的索引。

例子看可能更便于理解:
在这里插入图片描述

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

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

相关文章

百战c++(11)

31.找错 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含义,这一篇就够了!

文章目录axis的含义旁门左道式理解二维数组中的axis三维数组中的axis正规理解axis的含义 在自己分析之前先摆上官方关于多维数组中axis的值的定义&#xff1a; axis 0&#xff0c;表示第一个维度 axis 1&#xff0c;表示第二个维度 axis -1&#xff0c;表示最后一个维度…

百战c++(12)

36. 定义 int **a[3][4], 则变量占有的内存空间为&#xff1a;_____ 37. 编写一个函数&#xff0c;要求输入年月日时分秒&#xff0c;输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒&#xff0c;则输出2005年1月1日0时0分0秒。 38.写一个函数&#xff0c;判…

Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

Struts2.3.5Hibernate3Spring3.1基于注解实现的的多文件上传&#xff0c;下载,这里是上传文件到数据库中&#xff0c;上传控件可以增加和删除&#xff0c;有需要的朋友可以看看。 以下是源码下载地址&#xff1a;http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高级索引——reindex()方法

文章目录索引对象多个数据结构之间共享index类对象is与的区别重置索引——reindex()索引操作Series的索引操作切片不连续索引布尔型索引DataFrame的索引操作获取不连续的Series对象切片Pandas库中的操作索引方法索引对象 Index类对象&#xff0c;该对象不可以进行修改&#xf…

【精品计划1】动态规划入门到熟悉,看不懂来打我啊

持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上&#xff0c;斐波纳契数列以如下被以递归的方法定义&#xff1a;F(0)0&#xff0c;F(1)1, F(n)F(n-1)…

Pandas数据排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目录按索引排序——sort_index()对Series排序对DataFrame排序按值排序——sort_value()对Series进行排序对DataFrame进行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大总结2】大学两年,写了这篇几十万字的干货总结

本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、NOSQL、网络/前端/项目基础知识、安全和测试、框架的学习、中间件和工具、设计模式和框架原理、我推荐的资料、我的建议 本篇文章应该算是Java后端开发技术栈的&#xff0c;但是大部分是基础…

Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目录层次化索引的概念层次化索引的创建使用嵌套列表的方式构造层次化索引对象Series对象DataFrame对象通过MultiIndex类的方法构建层次化索引通过from_tuples()方法创建MultiIndex对象通过from_arrays()方法创建MultiIndex对象通过from_product()方法创建MultiIndex对象层次…

《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

我摊牌了&#xff0c;这篇文章&#xff0c;值得99%的人收藏 此文后续会改为粉丝可见&#xff0c;所以喜欢的请提前关注和收藏&#xff0c;不迷路。 最近有五本我喜欢的redis实体新书&#xff0c;想要的去评论&#xff0c;我写个随机数抽奖包邮送给你。 那么&#xff0c;准备好…

Python数据预处理之异常值的处理——【自定义的three_sigma()函数、boxplot()方法】

文章目录基于3σ原则检测异常值代码实现测试基于箱型图检测异常值异常值的处理基于3σ原则检测异常值 3σ原则&#xff0c;又称拉依达准则。是指假设一组检测数据只含有随机误差。对其进行计算处理得到标准偏差&#xff0c;按一定概率确定一个区间&#xff0c;凡是超过这个区间…

那个谷歌的网红扔鸡蛋的题,来看看教科书式的回答

leetcode顶级难题&#xff0c;谷歌面试天天问&#xff0c;来看看吧&#xff0c;带你来一步一步达到最优解。 谷歌不知道问了多少遍&#xff0c;蓝桥杯也出现过&#xff0c;leetcode上是顶级难题&#xff0c;到底是什么题能如此频繁地出现&#xff1f;我们一探究竟吧。 原题描述…

Python更改数据类型——astype()方法和to_numeric()函数

文章目录明确指定数据的类型通过dtypes属性进行查看创建Pandas对象指定数据类型转换数据类型通过astype()方法强制转换数据的类型通过to_numeric()函数转换数据类型明确指定数据的类型 通过dtypes属性进行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不骗你,没读这一篇,你不可能懂二分

上篇文章讲动态规划获得了80k浏览&#xff0c;这次的二分也值得你们一看&#xff0c;这个系列是特别用心写的&#xff0c;准备出书的哦 动态规划 3.0 引子 图书馆自习的时候,一女生背着一堆书进阅览室,结果警报响了,大妈让女生看是哪本书把警报弄响了&#xff0c;女生把书倒出…

Python之数据合并——【concat()函数、merge()函数、join()方法、combine_first()方法】

文章目录轴向堆叠数据——concat()函数横向堆叠与外连接纵向堆叠与内连接主键合并数据——merge()函数内连接方式外连接方式左连接方式右连接方式其他根据行索引合并数据——join()方法四种连接方式行索引与列索引重叠合并重叠数据——combine_first()方法轴向堆叠数据——conc…

超硬核!操作系统学霸笔记,考试复习面试全靠它

之后会发布基于基础知识的大部分算法的模拟代码合集&#xff0c;敬请关注。 进程基础 进程的基本概念 程序顺序执行的特征&#xff1a; 1&#xff09;顺序性&#xff1a;处理机严格按照程序所规定的顺序执行&#xff0c;每一步操作必须在下一步操作开始前执行 2&#xff09;封…

配置tomcat6.0的HTTPS(单向)

利用JDK自带的产生证书的工具 生成证书 建立一个脚本文件&#xff0c;内容如下&#xff1a; set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…

Python之数据重塑——【stack()方法和unstack()方法、pivot()方法】

文章目录重塑层次化索引对于单层索引的DataFrame类对象stack()方法unstack()方法对于多层索引的DataFrame类对象辨析操作内层索引与外层索引的区别查看多层索引对象转换后的类型轴向旋转——pivot()方法重塑层次化索引 Pandas中重塑层次化索引的操作主要是stack()方法和unstac…

超硬核!学霸把操作系统经典算法给敲完了!要知行合一

上期的笔记&#xff0c;浏览快1万了&#xff0c;既然关注的人很多&#xff0c;那就发出来承诺过的算法全模拟&#xff0c;希望帮到你们。 上期的操作系统学霸笔记&#xff0c;考试复习面试全靠它 一、模拟进程调度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之数据转换——【rename()方法、cut()函数、get_dummies()函数】

文章目录重命名轴索引离散化连续数据哑变量处理类别型数据重命名轴索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…