MATLAB scatter3、plot3 速度差异

2024-02-29

这是关于 MATLAB 如何花费不同的时间来绘制同一件事及其原因。

我在 3D 空间中生成 10000 个点:

X = rand(10000, 1);
Y = rand(10000, 1);
Z = rand(10000, 1);

然后,我使用四种不同方法之一来绘制此图,创建如下图:

我关闭了所有数字并清理了每次运行之间的工作空间,以确保公平。

使用 scatter3 进行批量绘图:

>> tic; scatter3(X, Y, Z); drawnow; toc
Elapsed time is 0.815450 seconds.

使用 scatter3 进行单独绘图:

>> tic; hold on;
for i = 1:10000
    scatter3(X(i), Y(i), Z(i), 'b');
end
hold off; drawnow; toc
Elapsed time is 51.469547 seconds.

使用plot3进行批量绘图:

>> tic; plot3(X, Y, Z, 'o'); drawnow; toc
Elapsed time is 0.153480 seconds.

使用plot3单独绘图:

>> tic; hold on
for i = 1:10000
    plot3(X(i), Y(i), Z(i), 'o');
end
drawnow; toc
Elapsed time is 5.854662 seconds.

MATLAB 在“较长”例程中在幕后做了什么,才需要这么长时间?使用每种方法的优点和缺点是什么?

Edit:感谢 Ben Voigt 的建议(参见答案),我已将drawnow时间上的命令——但这对时代没有多大影响。


运行所需时间的主要区别scatter3 and plot3来自这样一个事实plot3被编译,同时scatter3被解释(正如您在编辑函数时将看到的那样)。如果scatter3也已编译,速度差异会很小。

循环绘图与一次性绘图所需时间的主要区别在于,您将绘图句柄作为轴的子项添加到绘图中(看看get(gca,'Children')),因此您在循环内生成了一个复杂的数组,我们都知道这很慢。此外,您经常调用多个函数而不是一次,因此会产生函数开销的调用。

重新计算轴限制在这里不是问题。如果你跑

for i = 1:10000
    plot3(X(i), Y(i), Z(i), 'o');
    drawnow;
end

这迫使 Matlab 在每次迭代时更新图形(而且速度慢很多),您会看到轴限制根本没有改变(因为默认轴限制是 0 和 1)。然而,即使轴限制开始时不同,它们也不需要多次迭代就能与这些数据收敛。与省略比较hold on,这使得绘图需要更长的时间,因为每一步都会重新计算轴。

为什么有这些不同的功能?scatter3允许您在单个手柄下绘制具有不同标记大小和颜色的点,而您需要一个循环并使用以下命令获取每个点的手柄plot3,这不仅在速度方面是昂贵的,而且在内存方面也是昂贵的。但是,如果您需要单独与不同的点(或点组)进行交互 - 也许您想为每个点添加单独的图例条目,也许您希望能够单独打开和关闭它们等 - 使用plot3循环可能是最好的(尽管很慢)解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB scatter3、plot3 速度差异 的相关文章

  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • 在 R 中打印绘图时第一页为空

    我正在尝试创建一个包含多个图的pdf 更具体地说 我想保存我的图 每页 4 个 因此 我在 r 中有以下代码 可以工作 但将页面留空 第一个 pdf Plots plots numeric four in page pdf paper a4
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 每个刻度标签都有不同的颜色

    我正在尝试使用 matplotlib python 3 5 创建一个散点图 其中 x 轴上的每个刻度都有不同的颜色 这怎么可能 例如 假设 x 刻度为 Mo Tu We Th Fr Sa Su 现在我希望 Mo 是绿色的 Tu 是蓝色的 等
  • 如何加载具有可变文件名的 .mat 文件?

    select all mat files oar dir oar mat n oar name loop through files for l 1 length oar load pat oar l lt this is the mat
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 对于多项式,获取其所有极值并通过突出显示所有单调部分来绘制它

    有人问我这个有趣的问题 我认为值得将其发布在这里 因为 Stack Overflow 上还没有任何相关线程 假设我有长度为的多项式系数n vector pc 其中次数多项式n 1对于变量x可以以其原始形式表示 pc 1 pc 2 x pc
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • pandas 中连续数据的平行坐标图

    pandas 的 parallel coordinates 函数非常有用 import pandas import matplotlib pyplot as plt from pandas tools plotting import par
  • 选择您要显示的数据系列

    我有一个包含多个数据系列的图 我希望能够选择我想要显示的系列 例如 只有0 and 20 那些 有没有一种简单的方法可以通过操作图表而不使用JCheckBox 例如 我希望能够通过单击该系列的图例来做到这一点 如图所示here https
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt

随机推荐

  • RStudio 更改 pandoc .latex 模板

    我想使用不同的 Latex 模板来渲染 R markdown 版本 2 我发现了以下建议 a 模板位置 system file rmd latex default tex package rmarkdown b YAML Front Mat
  • Collectstatic 创建空文件

    我正在尝试将应用程序升级到 Django 1 11 但遇到了问题collectstatic 旧版本 django 1 8 17 django storages 1 5 1 新版本 django 1 11 12 django storages
  • C 中指针比较如何工作?可以比较不指向同一数组的指针吗?

    在 K R C 编程语言第二版 第 5 章中 我读到了以下内容 首先 在某些情况下可以比较指针 如果p and q指向同一个数组的成员 那么关系如下 lt gt 等工作正常 这似乎意味着只能比较指向同一数组的指针 但是当我尝试这段代码时 c
  • 解析 LocalDate 但得到 DateTimeParseException; dd-MMM-uuuu

    我正在尝试转换String to LocalDate using DateTimeFormatter 但我收到一个异常 java time format DateTimeParseException Text 2021 10 31 无法在索
  • 如何在 65536 行后添加 SSRS 分页符,计算组页眉/页脚

    我有一个 SSRS 报告 当行数大于 Excel 2003 限制 65536 时 该报告无法导出到 Excel 该报告已经具有带有组页脚的分组级别 我尝试在表达式上添加一个带有分页符的额外分组级别 ceiling rownumber not
  • 线太长。姜戈 PEP8

    PEP8信息 models py 10 80 E501 line too long 83 gt 79 characters 模型 py field TreeForeignKey self null True blank True relat
  • 展开/折叠 ttk Treeview 分支

    我想知道 ttk Treeview 中折叠和展开分支的命令 这是一个简约的示例代码 coding utf 8 import tkinter as tk from tkinter import ttk root tk Tk tree ttk
  • 沿直线或路径移动 SVG 对象

    我想要为 SVG 对象设置动画 以便它遵循我从 d3 js 中的线条生成器构建的 SVG 路径 有什么简单的方法可以实现这一目标吗 特别是 我想获得与我的路径相对应的插值坐标 从那里 使用 tween js 或 d3 js 本身执行动画将很
  • 防止嵌套对象的 mongodb C# 驱动程序将 id 序列化为 _id

    我正在使用 C mongodb 驱动程序来更新 mongodb 中的记录 下面的代码对我来说工作正常 但它会自动将所有出现的 id 转换为 id var client GetMongoClient var collection1 GetMo
  • 使用 C# 压缩/解压字符串

    我是 net新手 我正在用 C 进行字符串压缩和解压 有一个 XML 我正在转换为字符串 然后进行压缩和解压缩 我的代码中没有编译错误 除非我解压代码并返回字符串时 它只返回 XML 的一半 下面是我的代码 有错误的地方请指正 Code c
  • 如何使用数据库更改更新 edmx 文件?

    我有一个 edmx 文件 并且更改了数据库中的一个表 我知道有一个 从数据库更新模型 向导 但在许多情况下这是无用的 例如 如果我将字段从非空更改为可为空 或者如果我删除字段 则更新模型不会反映更改 我必须删除实体并将其添加回来才能使更改出
  • 如何获取外部页面优惠券/优惠券表格以在 OpenCart 中使用?

    我的 OpenCart 环境中有另一个页面 比如说 关于我们 页面 其中包含下面这些表单 假设用户的购物车中有商品 这些表单应该可以工作 但不能 在此输入您的优惠券代码
  • nginx 将所有 http 重定向到 https,但有一个例外

    我想将所有 http 流量重定向到 https 但有一个例外 url 中带有 preview 的任何内容我都想保留在 http 上 我尝试过以下配置 但它一直告诉我有一个重定向循环 server listen 80 server name
  • C++0x没有信号量?如何同步线程?

    C 0x 真的不会有信号量吗 Stack Overflow 上已经有一些关于信号量使用的问题 我一直使用它们 posix 信号量 来让一个线程等待另一个线程中的某个事件 void thread0 doSomething0 event1 wa
  • 有没有办法以编程方式将 Alias 添加到 Powershell Cmdlet?

    我正在为我的应用程序编写自定义 Powershell cmdlet 并且需要为某些 cmdlet 提供别名 假设我有 cmdlet Get DirectoryListing 并且我想向此 cmdlet 添加别名 例如 gdl 我怎样才能做到
  • React.js 服务器端渲染和事件处理程序

    我正在学习使用react js 并且在使用事件处理程序时遇到一些问题 最后一个问题是 是否可以使用服务器端渲染并将事件处理程序自动发送到客户端 这是我的例子 我有一个 index jsx 我渲染服务器端并将其发送到客户端 var React
  • Vuetify,工具提示:“on”和“attrs”有什么用?

    我在 Vuetify 文档中查找 Tooltip 找到了这个示例
  • 定位并删除 jupyter 笔记本中的隐藏内核

    我试图找出我的 mac 中的 anaconda 内核在哪里 因为应用程序报告了不同的事情 如果我运行 jupyter 内核规范列表 I get 可用内核 python2 用户 用户 anaconda 共享 jupyter kernels p
  • 传递参数 Angular 2 传统方式

    我正在尝试以这种格式将参数传递给一个组件www domain com param value 但是 Angular 不断发送这样的参数www domain com param value 为什么要更换 for 这是我的路线配置 const
  • MATLAB scatter3、plot3 速度差异

    这是关于 MATLAB 如何花费不同的时间来绘制同一件事及其原因 我在 3D 空间中生成 10000 个点 X rand 10000 1 Y rand 10000 1 Z rand 10000 1 然后 我使用四种不同方法之一来绘制此图 创