使用NumPy、Numba的简单使用(二)
本来要写NLP第三课动态规划的,日了,写到一半发现自己也不会了,理论很简单,动态规划咋回事也知道,但是实现在源码上还是有点难度,现在简单给予题目描述,小伙伴也可以来思考一下,例题一,我们现在有1元硬币,2元硬币,5元硬币和10元硬币。我们要将M金额的钱换为硬币,保证硬币数目最少,我们的换法是什么,例题二,我们现在有M米的绳子,截成N段(N的长度一定为整数),将N段绳子的长度相乘,保证乘积结果为最大值,我们需要截取,过几天再回头来写这个吧。我们今天来继续说说numpy的用法,这次我们通过习题来看看numpy的用法。
问题:将arr中的所有奇数替换为-1,而不改变arr。(提示where)
arr = np.arange(10)
out = np.where(arr % 2 == 1, -1, arr)
where语法为,参数一是条件,参数二是满足条件的要替换为什么,参数三是输入array。
问题:将一维数组转换为2行的2维数组,给定:np.arange(10)
arr = np.arange(10)
out = np.reshape(2,-1)
reshape语法为(行,列)若参数二列为-1,为不限制
问题:垂直堆叠数组a和数组b,给定:a = np.arange(10).reshape(2,-1) b = np.repeat(1, 10).reshape(2,-1) 期望的输出:
> array([[0, 1, 2, 3, 4],
> [5, 6, 7, 8, 9],
> [1, 1, 1, 1, 1],
> [1, 1, 1, 1, 1]])
a = np.arange(10).reshape(2,-1)
b = np.repeat(1, 10).reshape(2,-1)
np.concatenate([a, b], axis=0) # 方法一
np.vstack([a, b]) # 方法二
np.r_[a, b] # 方法三
方法一:concatenate语法是参数一列表,axis=0为纵向堆叠,1位横向
方法二:vstack垂直堆叠,扩展hstack为横向。
方法三:r_垂直堆叠,扩展c_为横向。
问题:创建以下模式而不使用硬编码。只使用numpy函数和下面的输入数组a。
给定:
a = np.array([1,2,3])` 期望的输出:
> array([1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3])
a = np.array([1,2,3])
np.r_[np.repeat(a, 3), np.tile(a, 3)]
说明:np.repeat(a, 3)获得到array([1, 1, 1, 2, 2, 2, 3, 3, 3]),np.tile(a, 3)获得到array([1, 2, 3, 1, 2, 3, 1, 2, 3]),然后应r_进行堆叠
问题:获取数组a和数组b之间的公共项。ab的交集
np.intersect1d(a,b)
问题:从数组a中删除数组b中的所有项。给定:a = np.array([1,2,3,4,5]) b = np.array([5,6,7,8,9]) 期望的输出:>array([1,2,3,4])
a = np.array([1,2,3,4,5])
b = np.array([5,6,7,8,9])
np.setdiff1d(a,b)
setdiffld使用时注意顺序,在第一个参数内除去包含第二个元素的数据,且不包含剩余第二个参数的元素。(可能有点绕嘴)。
问题:获取a和b元素匹配的位置。
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
np.where(a==b)
问题:获取5到10之间的所有项目。
a = np.array([2, 6, 1, 9, 10, 3, 27])
index = np.where((a >= 5) & (a <= 10))
a[index]
问题:在数组arr中交换行1和2。
arr = np.arange(9).reshape(3,3)
arr[[1,0,2],:]
问题:在数组arr中交换列1和2。
arr = np.arange(9).reshape(3,3)
print(arr)
arr[:, [1,0,2]]
问题:反转二维数组arr的行。
arr = np.arange(9).reshape(3,3)
arr[::-1]
问题:反转二维数组arr的列。
arr = np.arange(9).reshape(3,3)
arr
arr[:, ::-1]
问题:创建一个形状为5x3的二维数组,以包含5到10之间的随机十进制数。
arr = np.arange(9).reshape(3,3) # Solution Method 1:
rand_arr = np.random.randint(low=5, high=10, size=(5,3)) + np.random.random((5,3))
# print(rand_arr) # Solution Method 2:
rand_arr = np.random.uniform(5,10, size=(5,3))
print(rand_arr)
这里需要详细说明一下,arr[a,b] 也就是arr的切片 例如:a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2,而在我们的二维数组中,我们可以使用‘,’;例如a[X,M],这时我们就取出,第X+1行的第M+1个元素。
还有:和,还有...并用的。我们来看一个例子,:也就是所有,例如a[:,2]就是我们要取出管他多少行的第三列所有。同事a[2,:]也是如此,第二行的所有,管他多少列呢。
我们上面说的::N两个冒号连接在一起就是从第:个元素,取到第:个元素,步长是N,::也就是说取得所有吧。步长为负数时会反转。下期我们继续说说Nump的用法吧~!
使用NumPy、Numba的简单使用(二)的更多相关文章
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- numpy和pandas简单使用
numpy和pandas简单使用 import numpy as np import pandas as pd 一维数据分析 numpy中使用array, pandas中使用series numpy一 ...
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 【sql注入】简单实现二次注入
[sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- Java秒杀简单设计二:数据库表和Dao层设计
Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表 https://www.cnblogs.com/taiguyiba/p/9791431.html ...
- 爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中
爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中 准备使用的环境和库Python3.6 + requests + bs4 + csv + multi ...
- SignalR的简单使用(二)
原文:SignalR的简单使用(二) 之前提到SignalR代理在网页,通过生成的Js来完成相关的功能.但我不禁想一个问题, 难到SignalR的服务端就能寄存在web端吗,通过访问网页能方式才能启动 ...
随机推荐
- \" 转义字符, \a系统警报,逐字字符串(verbatim string)
string str="The key factors are \"focus\" and \"perseverance\""; strin ...
- Java并发编程杂记(2)
对象共享 synchronized 设定原子性确定临界区 + 内存可见性 要解决如下问题 防止一个线程在使用对象状态而另一个线程在修改对象状态:且当一个线程修改了对象状态后,对其他线程可见. 可见 ...
- sharepointOnline的外接应用创建
#CODE STARTS HERE $programFiles = [environment]::getfolderpath("programfiles") add-type -P ...
- JS基础语法---练习:交换两个变量的值
* JavaScript简称为JS * JavaScript是什么? * 是一门脚本语言:不需要编译,直接运行 * 是一门解释性的语言:遇到一样代码就解释一行代码 * C#语言 ...
- CSS3/CSS之居中解析(水平+垂直居中、水平居中,垂直居中)
首先,我们来看下垂直居中: (1).如果是单行文本,则可以设置的line-height的数值,让其等于父级元素的高度! <!DOCTYPE html> <html lang=&quo ...
- 如何给HTML页面设置行高
设置行高 由于简单还是老样子直接上代码了哦,注意:line-height属性值可以使用固定值如:20px..和百分比如:20%. 如果想让文字垂直居中如下:行高的主要作用是用来设置文本的垂直方向居中对 ...
- 设置view的layer属性方法
1.需要导入QuartzCore.framewoork框架到工程2.在文件中导入#import 3.设置 必须导入的空间 #import<QuartzCore/QuartzCore.h> ...
- 源码包安装转换rpm包
目录 纯净版虚拟机 1. 先安装个虚拟机,登陆nginx官网 http://nginx.org/选择一个稳定的版本 2. 右键复制地址,到新克隆的纯净虚拟机wget 下载 3.源码包 4.解压 tar ...
- 配置oracle的ssl连接
配置oracle的ssl连接 网上也没有中文资料,我硬着头皮看官方文档肯完,终于配置成功,下面是我配置步骤 配置安全套接层连接oracle 目录 1. 配置简介 1 2 ...
- 洛谷 P1381 单词背诵
洛谷 P1381 单词背诵 洛谷传送门 题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的 ...