极端情况、意外和不寻常的 MATLAB [关闭]

2024-03-07

多年来,在阅读其他代码时,我遇到并收集了一些 MATLAB 语法示例,这些示例起初可能不寻常且违反直觉。请随时发表评论或补充此列表。我用r2006a验证过。


MATLAB always将函数的第一个输出参数(如果至少有一个)返回到其调用者工作区,如果调用函数而不返回类似参数,也会意外地返回myFunc1(); myFunc2();调用者工作区仍将包含第一个输出myFunc2();作为“看不见的”ans多变的。它可以发挥重要作用,如果ans是一个参考对象 - 它将保持活动状态。


set([], 'Background:Color','red')

MATLAB 有时非常宽容。在这种情况下,为对象数组设置属性也适用于无意义的属性,至少当数组为空时是这样。这样的数组通常来自harray = findobj(0,'Tag','NotExistingTag')


myArray([1,round(end/2)])

这种使用end关键字可能看起来不干净,但有时非常方便,而不是使用length(myArray).


any([]) ~= all([])

出奇any([])回报false and all([])回报true。我一直认为all那么更强any.

EDIT:

with 不是空的争论all()回报true对于值的子集any()回报true(例如真值表)。这意味着any() false暗示all() false。 MATLAB 违反了这个简单的规则[]作为论证。

洛伦也在博客上谈论了它 http://blogs.mathworks.com/loren/2009/11/12/empty-arrays-with-flow-of-control-and-logical-operators/.


Select(Range(ExcelComObj))

过程式 COM 对象方法调度。不要奇怪exist('Select')返回零!


[myString, myCell]

在这种情况下,MATLAB 对字符串变量进行隐式转换myString至细胞类型{myString}。它有效,即使我不希望它这样做。


[double(1.8), uint8(123)] => 2 123

另一个演员的例子。想必大家都会期待uint8被投射到的值double但 Mathworks 有不同的看法。如果没有警告,这种行为是非常危险的。


a = 5;
b = a();

它看起来很傻,但你可以用圆括号调用变量。实际上这是有道理的,因为这样你就可以执行给定函数句柄的函数。


Syntax Foo(:)不仅适用于数据,还适用于函数(如果调用为)Bar.Foo(:),在这种情况下,函数输入参数作为 char 传递colon ':'.

例如让Bar.Foo = @(x) disp(x)现在打电话Bar.Foo(:)打印字符':'在 MATLAB 命令行窗口中。

这个奇怪的功能适用于所有 MATLAB 7 版本,且不会发出警告。


a = {'aa', 'bb'
'cc', 'dd'};

令人惊讶的是,这段代码既不返回向量,也不引发错误,而是仅使用代码布局定义矩阵。这大概是远古时期的遗物。

EDIT:非常方便的功能,请参阅 gnovice 的评论。


set(hobj, {'BackgroundColor','ForegroundColor'},{'red','blue'})

该代码执行您可能期望它执行的操作。那个功能set接受一个结构作为它的第二个参数是一个已知的事实并且是有道理的,这个语法只是一个cell2struct away.


等价规则有时一开始是意想不到的。例如'A'==65返回 true(尽管对于 C 专家来说这是不言而喻的)。相似地isequal([],{})回报,正如预期的那样,false and isequal([],'')回报true.

字符串-数字等价意味着所有字符串函数也可以用于数字数组,例如在大数组中查找子数组的索引:

ind = strfind( [1 2 3 4 1 2 3 4 1 2 3 4 ], [2 3] )

MATLAB 函数isnumeric()回报false对于布尔值。这感觉只是......错误:-)


您还知道哪些其他意想不到/不寻常的 MATLAB 功能?


图像坐标到绘图坐标以前每次都来找我。

%# create an image with one white pixel
img = zeros(100);
img(25,65) = 1;

%# show the image
figure
imshow(img);

%# now circle the pixel. To be sure of the coordinate, let's run find
[x,y] = find(img);
hold on
%# plot a red circle...
plot(x,y,'or')
%# ... and it's not in the right place

%# plot a green circle with x,y switched, and it works
plot(y,x,'og')

Edit 1

数组维度

变量至少有两个维度。标量是大小[1,1],向量是大小[1,n] or [n,1]. Thus, ndims对于其中任何一个都返回 2(事实上,ndims([])也是 2,因为size([]) is [0,0])。这使得测试输入的维度变得有点麻烦。要检查一维数组,您必须使用isvector, 0D 数组需要isscalar.

Edit 2

数组赋值

通常,Matlab 对数组赋值非常严格。例如

m = magic(3);
m(1:2,1:3) = zeros(3,2);

throws a

??? Subscripted assignment dimension mismatch.

然而,这些工作:

m(1:2,1:2) = 1; %# scalar to vector
m(2,:) = ones(3,1); %# vector n-by-1 to vector 1-by-n (for newer Matlab versions)
m(:) = 1:9; %# vector to 'linearized array'

Edit 3

数组大小错误的逻辑索引祝调试顺利!

逻辑索引似乎调用find,因为您的逻辑数组不需要与索引相同数量的元素!

>> m = magic(4); %# a 4-by-4 array
>> id = logical([1 1 0 1 0])
id =
     1     1     0     1     0
>> m(id,:)  %# id has five elements, m only four rows
ans =
    16     2     3    13
     5    11    10     8
     4    14    15     1
%# this wouldn't work if the last element of id was 1, btw

>> id = logical([1 1 0])
id =
     1     1     0
>> m(id,:) %# id has three elements, m has four rows
ans =
    16     2     3    13
     5    11    10     8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

极端情况、意外和不寻常的 MATLAB [关闭] 的相关文章

  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 使用 java 执行 Matlab 函数

    我正在编写一个应用程序 它使用 matlab 进行图像处理 然后使用 Java 接口显示结果 由于某些原因 我必须同时使用 Java 和 Matlab 如何在java中使用matlab函数 如何创建和访问界面 MATLAB控制 http m
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 在 Matlab 中快速加载大块二进制文件

    我有一些相当大的 int16 格式的数据文件 256 个通道 大约 75 1 亿个样本 每个文件约 40 50 GB 左右 它以平面二进制格式编写 因此结构类似于 CH1S1 CH2S1 CH3S1 CH256S1 CH1S2 CH2S2
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 如何加载具有可变文件名的 .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
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne

随机推荐

  • 如何删除 HTML 节点之间的空白?

    我正在尝试从 HTML 片段中删除空格 p tags p p Foo Bar p p bar bar bar p p bla p 正如你所看到的 之间总是有一个空格 p p tags 问题是空白会产生 br 将字符串保存到我的数据库时的标签
  • Spark SQL“限制”

    环境 使用 Hadoop 的 Spark 1 6 Hortonworks 数据平台 2 5 我有一个包含 100 亿条记录的表 我想获取 3 亿条记录并将它们移到临时表中 sqlContext sql select from my tabl
  • 如何聚焦位于子组件中的输入字段

    我在父组件中有一个按钮 我想通过单击该按钮来聚焦位于子组件中的输入字段 我该怎么做 您可以利用refs达到结果 class Parent extends React Component handleClick gt this refs ch
  • Laravel 身份验证,我无法检索登录的用户

    Auth check 总是返回 false 这很奇怪 因为登录函数将我重定向到 redirectTo url 因此尝试成功 但之后我无法检索用户 我正在使用 Laravel 5 2 14 和 Xampp 我不知道还要写什么 因为它应该是开箱
  • Swing 桌面开发

    我有一个关于 java 桌面 GUI 应用程序的非常普遍的问题 我的经验 在过去的几年里 我开发了许多桌面应用程序 其中一些单独使用 Swing 一些使用 Spring RCP 这很棒 但我仍然不能只押注于一个已经超过 3 年没有更新的框架
  • 设备重新启动后,AVSampleDisplayBuffer 随机挂起

    问题描述 AVSampleBufferDisplayLayer 似乎在 iOS 12 3 1 上挂起 gt iOS 12 2 也受到影响 重启 看起来 5 分钟后一切又恢复正常了 该问题在 iOS 11 上无法重现 在我们的生产代码中 我们
  • 在 /usr/share/phpMyAdmin/libraries/Error.class.php 中找不到 phpMyAdmin 类“PMA_Message”

    我刚刚收到此错误 过去 2 年 phpMyAdmin 中没有错误 PHP 致命错误 在第 24 行 usr share phpMyAdmin libraries Error class php 中找不到类 PMA Message 我尝试搜索
  • 如何强制 ghc 的分析器更深入地了解库?

    我正在尝试分析我的程序 所以我编译它 prof and auto all标志并运行 P获取详细的分析报告 ghc make prof auto all Test hs Test RTS P 这是一份分析报告 COST CENTRE MODU
  • R 将 KS 测试逐行应用于 2 个矩阵

    我在 R 中有两个矩阵 A 和 B 行数相同 但列数不同 我想运行一个柯尔莫哥洛夫 斯米尔诺夫检验 https stat ethz ch R manual R devel library stats html ks test html每个矩
  • 在 PowerShell 中拆分不带分隔符的字符串

    我想分割一个字符串并将结果标记存储在变量中 例如我的字符串是160519 我想以一种方式分割它16 05 and 19存储在单独的变量中 我尝试使用 split 但是因为我的字符串没有分隔符 所以我发现很难剪切字符串 如果使用正则表达式 实
  • 从另一个表单添加到列表视图

    我想知道如何通过在 form2 中的文本框输入数据来更新 form1 中的列表视图 如果我将所有文本框放在同一个表单上 我的代码可以正常工作 我想我需要对第二个表格的一些参考 但无法让它工作 任何能让我朝着正确方向前进的建议都会很好 也有任
  • RegisterStartupScript 似乎无法在更新面板内进行页面回发

    好的 所以我正在开发一个使用自定义日期选择器控件的系统 我知道还有其他控件 但为了保持一致性 我想了解为什么我当前的问题发生并修复它 所以它是一个带有文本框的自定义用户控件 在 Page PreRender 上执行以下操作 protecte
  • 在asp.net core rc2应用程序的ActionFilterAttribute中访问IConfiguration [重复]

    这个问题在这里已经有答案了 我正在编写将验证验证码的属性 为了正常工作 它需要知道秘密 我将其保留在设置中 秘密管理器工具 但是我不知道如何从属性类读取配置 asp net core中的DI支持构造函数注入 不支持属性注入 所以这会报编译错
  • 将图像从浏览器保存到手机图库

    因此 纯粹从安全角度来看 这似乎不太可能 但我需要做好基础工作 有没有人遇到过将浏览器中的图像保存到用户图库的方法 在本例中 我专门谈论来自站点服务的 javascript 不是音位间隙 虽然我知道您可以点击并按住图像进行保存 但我希望为技
  • 帮助小商店在“乔尔测试”中获得更高分数的工具

    关于问题 1 至问题 4乔尔测试 http www joelonsoftware com articles fog0000000043 html我认为都是关于正在使用的开发工具和为开发人员提供的支持系统 您使用源代码管理吗 你能一步完成构建
  • 如果您按住 Ctrl 键单击或按住 Rt 键单击通知图标,如何获得不同的上下文菜单?

    我有一个基于系统托盘的应用程序 如果您右键单击它 我有一个很好的上下文菜单 但是如果您左键单击它 我希望显示一个不同的上下文菜单 现在我让不同的菜单显示出来 private void niTrayIcon MouseClick object
  • 如何使这个 SwingWorker 代码可测试

    考虑这段代码 public void actionPerformed ActionEvent e setEnabled false new SwingWorker
  • 角度.net core api cors预检请求错误

    我无法使 cors 工作 Angular net core 2 1 我收到此错误 访问 XMLHttpRequest 位于 https dev SaveAPP https dev SaveAPP 从原点 https 页面 https pag
  • dc.js - 动态更改折线图中堆叠层的 valueAccessor 并重绘它

    我正在尝试实现一个仪表板来显示基本数据 我实际上完全陷入了一个问题 奇怪的是 我在网上找不到任何类似的东西 所以我没有太多关于如何继续前进的线索 我主要有两个图表 a lineChart called stackChart that 使用
  • 极端情况、意外和不寻常的 MATLAB [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi