多年来,在阅读其他代码时,我遇到并收集了一些MATLAB语法的例子,这些例子起初可能不常见且违反直觉.请随时评论或补充此列表.我用r2006a验证了它.
MATLAB 总是将函数的第一个输出参数(如果它至少有一个)返回到其调用者工作空间,如果调用函数而不返回参数,myFunc1(); myFunc2();则调用者工作空间仍然会包含第一个输出myFunc2();为"不可见" ans变量.如果它ans是一个参考对象,它可以发挥重要作用- 它将保持活力.
set([], 'Background:Color','red')
Run Code Online (Sandbox Code Playgroud)
MATLAB有时很宽容.在这种情况下,将属性设置为对象数组也可以使用无意义属性,至少在数组为空时.这种阵列通常来自harray = findobj(0,'Tag','NotExistingTag')
myArray([1,round(end/2)])
Run Code Online (Sandbox Code Playgroud)
end关键字的使用可能看起来不干净,但有时非常方便而不是使用length(myArray).
any([]) ~= all([])
Run Code Online (Sandbox Code Playgroud)
惊人地any([])返回false并all([])返回true.我一直认为那all更强大any.
编辑:
与不为空的参数all()返回true给值的子集为其中any()返回true(例如真值表).这意味着any() false暗示all() false.MATLAB以[]参数的形式违反了这个简单的规则.
洛伦还在博客上写了这篇文章.
Select(Range(ExcelComObj))
Run Code Online (Sandbox Code Playgroud)
程序样式COM对象方法调度.不要奇怪exist('Select')回报为零!
[myString, myCell]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,MATLAB将字符串变量隐式转换myString为单元格类型{myString}.如果我不希望它这样做,它也可以工作.
[double(1.8), uint8(123)] => 2 123 …Run Code Online (Sandbox Code Playgroud) 我很快就会找到一些新学生,他们将编写MATLAB代码.他们是MATLAB的新手,但他们有使用Java和C++编写的经验.
我将让他们浏览MATLAB帮助的入门部分.另外,我想给出一个小教程,目的是防止他们在转换到MATLAB时犯下一些人们常犯的错误(例如"MATLAB从1开始计数"),并向他们展示一些他们可能没有的功能.要知道何时来自其他语言(例如"你可以直接从数组中减去一个标量,而对于向量,则有bsxfun").
我应该告诉他们最重要的事情是什么?
在Matlab中工作我有2个不同长度的x坐标向量.例如:
xm = [15 20 24 25 26 35 81 84 93];
xn = [14 22 26 51 55 59 70 75 89 96];
Run Code Online (Sandbox Code Playgroud)
我需要将xm映射到xn,或者换句话说,找到xn中哪些坐标最接近xm.因此,如果我有与这些坐标相关联的值,我可以将此地图用作索引并关联这些值.
两个向量都被排序,每个向量中没有重复.
我用for循环写了一个简单的函数:
function xmap = vectors_map(xm,xn)
xmap = zeros(size(xm));
for k=1:numel(xm)
[~, ind] = min(abs(xm(k)-xn));
xmap(k) = ind(1);
end
Run Code Online (Sandbox Code Playgroud)
对于上面的例子是返回
xmap =
1 2 2 3 3 3 8 9 10
Run Code Online (Sandbox Code Playgroud)
它工作正常,但需要一段时间长矢量(超过100,000点).
任何想法如何矢量化这段代码?
我有一个2D数组,称之为'A'.我还有另外两个2D数组,称之为'ix'和'iy'.我想创建一个输出数组,其元素是x_idx和y_idx提供的索引对的A元素.我可以通过循环执行此操作,如下所示:
for i=1:nx
for j=1:ny
output(i,j) = A(ix(i,j),iy(i,j));
end
end
Run Code Online (Sandbox Code Playgroud)
如果没有循环,我怎么能这样做?如果我输出= A(ix,iy),我在(ix)X(iy)的整个范围内得到A的值.
谢谢你,杰森
所以,我正在申请一份工作,需要弄清楚嵌套函数的工作原理.更具体地说,我想知道gnovice发布的以下示例是如何工作的.
问题是:
给定以下函数,在命令窗口中输入下面的代码时输出是什么?
function fcnHandle = counter
value = 0;
function currentValue = increment
value = value+1;
currentValue = value;
end
fcnHandle = @increment;
end
f1 = counter();
f2 = counter();
output = [f1() f1() f2() f1() f2()]; %# WHAT IS IT?!
Run Code Online (Sandbox Code Playgroud)
我不是在申请工作,而是能够找到问题的答案.我也发现了答案,从穆赫辛到这个问题直观(找到一个矩阵的大小而不调用内置函数).但是,我忍不住在脑海中听到阿尔伯特爱因斯坦的声音.

我认为文档有点乱,所以如果有人能够解释它是如何工作的,我会很高兴.
如果我有一个矩阵A,其中n值从65:90开始.如何获得A中最常见的10个值?我希望结果是一个10x2矩阵B,第一列中有10个常用值,第二列中出现的时间是10倍.
我有三个1-d数组,其中元素是一些值,我想将一个数组中的每个元素与其他两个元素中的所有元素进行比较.
例如:
a=[2,4,6,8,12]
b=[1,3,5,9,10]
c=[3,5,8,11,15]
Run Code Online (Sandbox Code Playgroud)
我想知道不同数组中是否有相同的值(在这种情况下有3,5,8)