根据条件创建新的 numpy 数组

2023-12-14

我有 2 个 numpy 数组:

aa = np.random.rand(5,5)
bb = np.random.rand(5,5)

当aa和bb都超过0.5时,如何创建一个值为1的新数组?


由于关注性能并使用两种方法,因此可以添加一些方法。一种方法是获取有效的布尔数组并转换为int数据类型与.astype() method。另一种方法可能涉及使用np.where这让我们可以选择0 and 1基于相同的布尔数组。因此,本质上我们有两种方法,一种利用高效的数据类型转换,另一种使用选择标准。现在,可以通过两种方式获得布尔数组 - 一种使用简单比较,另一种使用np.logical_and。因此,有两种获取布尔数组的方法和两种将布尔数组转换为的方法int数组,我们最终会得到下面列出的四种实现 -

out1 = ((aa>0.5) & (bb>0.5)).astype(int)
out2 = np.logical_and(aa>0.5, bb>0.5).astype(int)
out3 = np.where((aa>0.5) & (bb>0.5),1,0)
out4 = np.where(np.logical_and(aa>0.5, bb>0.5), 1, 0)

您可以尝试使用数据类型来使用精度较低的类型,这不会有什么坏处,因为我们将值设置为0 and 1反正。好处应该是显着的加速,因为它利用了内存效率。我们可以使用int8, uint8, np.int8, np.uint8 types。因此,前面列出的方法的变体使用新的int数据类型是 -

out5 = ((aa>0.5) & (bb>0.5)).astype('int8')
out6 = np.logical_and(aa>0.5, bb>0.5).astype('int8')
out7 = ((aa>0.5) & (bb>0.5)).astype('uint8')
out8 = np.logical_and(aa>0.5, bb>0.5).astype('uint8')

out9 = ((aa>0.5) & (bb>0.5)).astype(np.int8)
out10 = np.logical_and(aa>0.5, bb>0.5).astype(np.int8)
out11 = ((aa>0.5) & (bb>0.5)).astype(np.uint8)
out12 = np.logical_and(aa>0.5, bb>0.5).astype(np.uint8)

运行时测试(因为我们在这篇文章中关注的是性能)-

In [17]: # Input arrays
    ...: aa = np.random.rand(1000,1000)
    ...: bb = np.random.rand(1000,1000)
    ...: 

In [18]: %timeit ((aa>0.5) & (bb>0.5)).astype(int)
    ...: %timeit np.logical_and(aa>0.5, bb>0.5).astype(int)
    ...: %timeit np.where((aa>0.5) & (bb>0.5),1,0)
    ...: %timeit np.where(np.logical_and(aa>0.5, bb>0.5), 1, 0)
    ...: 
100 loops, best of 3: 9.13 ms per loop
100 loops, best of 3: 9.16 ms per loop
100 loops, best of 3: 10.4 ms per loop
100 loops, best of 3: 10.4 ms per loop

In [19]: %timeit ((aa>0.5) & (bb>0.5)).astype('int8')
    ...: %timeit np.logical_and(aa>0.5, bb>0.5).astype('int8')
    ...: %timeit ((aa>0.5) & (bb>0.5)).astype('uint8')
    ...: %timeit np.logical_and(aa>0.5, bb>0.5).astype('uint8')
    ...: 
    ...: %timeit ((aa>0.5) & (bb>0.5)).astype(np.int8)
    ...: %timeit np.logical_and(aa>0.5, bb>0.5).astype(np.int8)
    ...: %timeit ((aa>0.5) & (bb>0.5)).astype(np.uint8)
    ...: %timeit np.logical_and(aa>0.5, bb>0.5).astype(np.uint8)
    ...: 
100 loops, best of 3: 5.6 ms per loop
100 loops, best of 3: 5.61 ms per loop
100 loops, best of 3: 5.63 ms per loop
100 loops, best of 3: 5.63 ms per loop
100 loops, best of 3: 5.62 ms per loop
100 loops, best of 3: 5.62 ms per loop
100 loops, best of 3: 5.62 ms per loop
100 loops, best of 3: 5.61 ms per loop

In [20]: %timeit 1 * ((aa > 0.5) & (bb > 0.5)) #@BPL's vectorized soln
100 loops, best of 3: 10.2 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据条件创建新的 numpy 数组 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 事务性保存而不调用更新方法

    我有一个用 Transactional 注释的方法 我从 Oracle DB 检索一个对象 更改一个字段 然后从该方法返回 我忘记保存对象 但发现数据库无论如何都会更新 应用上下文
  • 阻止除 AJAX 请求之外对 PHP 文件的直接访问?

    我希望有一个使用 AJAX 访问 PHP 文件的网页 ajax file ajax php 问题是 我不希望人们能够在浏览器中键入地址来直接访问该 PHP 文件 有没有办法让只有 AJAX 请求才能访问该文件 我可以在 PHP 文件中检查一
  • JFrame 对象的垃圾收集器

    import javax swing public class Main public Main JFrame jf new JFrame Demo jf setDefaultCloseOperation JFrame EXIT ON CL
  • 按表达式树进行多列分组

    根据帖子引用属性的 LINQ 表达式感谢 Daniel Hilgarth 的帮助 我已经实现了 Group By Extension 我需要帮助来扩展 GroupByMany 如下所示 unitOfWork MenuSetRepositor
  • 为 PHP 设置 Apache 时遇到问题

    我对 PHP 非常陌生 我正在尝试设置我的 apache 开发服务器 但遇到了很多麻烦 我安装了 XAMPP 但无法让 apache 正常启动 我读到我可能遇到端口问题 但是我确实将端口从默认值 80 更新为 8080 配置中的 监听 但这
  • 当我执行syncdb时,Django出现UnicodeDecodeError

    我尝试使用 MySQL 设置 Django 但出现 UnicodeDecodeError 您能让我知道如何解决这个问题吗 我搜索了有关错误的信息 但我无法理解 我找到了这些代码并尝试了 def unicode self return str
  • 在两台笔记本电脑上使用 git,没有裸仓库

    我已经在我的第一台笔记本电脑上开始了项目 git init 然后开始工作 明天我要去度假 我想随身携带我的小型笔记本电脑 并时不时地参与项目 我通过 ssh 从更大的笔记本电脑克隆存储库 git clone ssh address 当我回来
  • 从 CGPoint 获取 SCNVector3

    我正在尝试从 CGPoint 获取 SCNVector3 我正在使用手势识别器来获取触摸的位置 作为 CGPoint 问题是 当我进行测试时 触摸并不总是会击中某些东西 因为并不总是有物体被触摸 触摸一个空的地方 将你的船移动到那个空的地方
  • 解析逗号分隔的字符串,其中一些子字符串用双引号引起来

    尝试解析所有数据都用双引号括起来的 csv 文件 因为双引号中可能有逗号 看起来像这样 songs 1 2 3 4 I Love You Plain White T s CBE10 22 15 CBE10 22 CB 984 10 05 1
  • 如何避免手动将 $registry 容器传递到我创建的每个新类的构造函数中?

    我一直在做MVC几个月来 我把所有东西都储存在我的 注册表目的 当我创建一个新类时 我通常只传递注册表 但我必须不断地传递 this gt registry创建新类时 e g class something public function
  • Typescript 重载箭头函数

    所以我们可以这样做 export function myMethod param number number export function myMethod param string string export function myMe
  • 从 Spyder 关闭远程内核

    我在集群上使用远程内核 并使用 Spyder 连接到该集群 为此 我在集群上启动我的内核python m spyder kernels console 然后 我将在 jupyter 运行时目录中创建的 json 文件复制传输到本地计算机 然
  • Android - NDK 共享库使用 nm / objdump 提取相关 JNI 挂钩

    我正在尝试从包含 JNI 粘合代码的共享库中提取相关符号 但 nm 似乎没有足够的帮助 方法签名不存在 所以我不知道要传递哪些参数 有任何想法吗 bash 3 2 arm linux androideabi nm D Desktop bac
  • 是否有一个 SQL 函数可以生成给定范围的序列号?

    我需要生成一个具有给定范围的连续整数数组 以便将其用于 SELECT tbl pk id FROM tbl WHERE tbl pk id NOT IN sequential array 如果您有给定的连续整数范围 即起点和终点 您应该能够
  • 使用 dplyr 对分组数据进行 cumsum

    我有一个数据框df 可以下载here 指的是看起来像这样的公司登记册 Provider ID Local Authority month year entry exit total 1 1 102642676 Warwickshire 10
  • 是否可以在一页中多次运行一个 Angular 2 应用程序?

    我正在从 asp net web 表单迁移到 Angular 4 我正在一步一步地进行 更换一个零件并将其投入生产 我在页面中多次加载相同的 Angular 应用程序时遇到问题 例如用代码
  • 删除奇怪的字体编码

    您好 我希望这是一个简单的问题 我正在通过 API 加载一些简单的数据 但是有些用户已经将其用户名设置为如下所示的精美字体 如何使用 PHP 将其转换为简单的标准编码 以便它显示为 Web Reposts 谢谢
  • 无法从 python os.path.abspath 获取有效的路径名

    我有以下包含文件绝对目录的字符串 D Sample Project testXcl data xlsx 将其传递到 os path abspath 时 我得到以下结果 D Sample Project testXcl data xlsx 发
  • Firebase 项目 URL 出现错误:添加 www 会导致“您的连接不是私有的”

    我有一个 firebase 项目 除非我使用以下命令输入我的项目的 url 否则该项目可以正确加载www 在前 这有效 https myproject firebaseapp com 这会返回一个错误 https www myproject
  • 根据条件创建新的 numpy 数组

    我有 2 个 numpy 数组 aa np random rand 5 5 bb np random rand 5 5 当aa和bb都超过0 5时 如何创建一个值为1的新数组 由于关注性能并使用两种方法 因此可以添加一些方法 一种方法是获取