假设在MATLAB中,我有一个矩阵A,其元素为0或1.
如何以更快的矢量化方式获取每列的最后一个非零元素的索引向量?
我可以
[B, I] = max(cumsum(A));
和使用I,但有更快的方法吗?(我假设cumsum会花费一点时间甚至加0和1).
编辑:我想我矢量甚至比我需要快速的更多-福兹先生"循环是伟大的,但在MATLAB每个循环似乎花费了我很多的调试即使是快的时间.
在MATLAB中,如何判断变量输出的位置?
我有大约10K行的MATLAB代码,大约有4个人正在处理它.在某个地方,有人以典型的方式将变量转储到MATLAB脚本中:
foo
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道变量输出是什么.而产出正在混乱其他更重要的产出.
有任何想法吗?
ps有人试过覆盖Standard.out吗?由于MATLAB和Java集成非常紧密,这会起作用吗?我遇到这个问题时在Java中使用的一个技巧是将Standard.out替换为我自己的版本.
我想绘制一条从一个明确定义的点到另一个定义点的线,然后将其转换为图像矩阵,在其上使用高斯滤波器进行平滑.为此,我使用函数line并getframe绘制一条线并捕获图像中的图形窗口,但getframe速度非常慢且不太可靠.我注意到它在计算机锁定时没有捕获任何内容,并且out of memory在170次执行后我收到错误.
我的问题是:
getframe我可以使用替代品吗?这是一个最小的代码示例:
figure1=line([30 35] ,[200 60]);
F= getframe;
hsize=40; sigma=20;
h = fspecial('gaussian',hsize,sigma);
filteredImg = imfilter(double(F.cdata), h,256);
imshow(uint8(filteredImg));
Run Code Online (Sandbox Code Playgroud)
[更新]
高性能Mark的想法linspace看起来非常有前景,但我如何访问用linspace?计算的矩阵坐标?我尝试了以下代码,但它不起作用,因为我认为它应该.我认为这是一个非常简单和基本的MATLAB的东西,但我无法绕过它:
matrix=zeros(200,60);
diagonal=round([linspace(30,200,numSteps); linspace(35,60,numSteps)]);
matrix(diagonal(1,:), diagonal(2,:))=1;
imshow(matrix);
Run Code Online (Sandbox Code Playgroud) 我使用它的句柄操作绘图上的数据:
x = 1:10; y = sin(x);
h1 = line(x,y);
Run Code Online (Sandbox Code Playgroud)
但是,如果在脚本实际终止之前图形被关闭,则执行此类操作会返回错误.
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
Run Code Online (Sandbox Code Playgroud)
h1在使用它进行任何操作之前,有没有办法检查是否是有效的句柄?
如何查看MATLAB中定义的全局变量列表?(我正在使用R2009a).
我已经在Google和SO上为此进行了无用的搜索,所以如果之前有人问过道歉的话.
我想从字符串中删除连字符(-),斜杠(/)和空格() from a string name(i)以便我可以将其用作结构字段名称.
这是我目前正在使用该功能的丑陋方式strrep:
cell2mat(strrep(strrep(strrep(name(i), '-',''),'/',''),' ', ''))
Run Code Online (Sandbox Code Playgroud)
我也尝试了其他变体,例如:
strrep(name(i),{'-','/'},{'',''});
strrep(name(i),['-','/'],['','']);
Run Code Online (Sandbox Code Playgroud)
什么是更有效的方法呢?
我有一个c等大小数组的单元格数组,即size(c{n}) = [ m l ... ]任何数组n.如何在一次扫描中获取所有数组元素的mean值(对单元数组索引n求平均值)?我想过使用cell2mat和mean,但前者不另一个层面,但变化添加l到l*n.手动循环当然需要永远......
我正在MATLAB中开展一个项目.它包括连续绘制从计算机串行端口接收的温度数据.我想无限地去做,所以有没有办法在C中创建无限循环?
现在如果实现为:
while(true)
%comments
end;
Run Code Online (Sandbox Code Playgroud)
正如摩尔所述,那么有没有办法更新标志,以便根据要求或任何其他操作终止它?
示例:我正在绘制通过ZigBee进行通信的5个节点的数据,然后如果我选择在Axis上绘制4个节点,那么在启动无限循环之后有任何方式可以改变循环中使用的数据通过MATLAB的GUI输入法还是任何标志?
我有一个网格定义为
[X, Y, Z] = meshgrid(-100:100, -100:100, 25); % z will have more values later
Run Code Online (Sandbox Code Playgroud)
和两种形状(椭圆形,在这种情况下):
x_offset_1 = 40;
x_offset_2 = -x_offset_1;
o1 = ((X-x_offset_1).^2./(2*Z).^2+Y.^2./Z.^2 <= 1);
o2 = ((X-x_offset_2).^2./(2*Z).^2+Y.^2./Z.^2 <= 1);
Run Code Online (Sandbox Code Playgroud)
现在,我想找到在非零的所有点或者椭圆形.我试过了
union = o1+o2;
Run Code Online (Sandbox Code Playgroud)
但由于我只是添加它们,重叠区域的值将为2而不是所需的值1.
如何将矩阵中的所有非零条目设置为1,而不管它们之前的值是什么?
(我试过normalized_union = union./union;,但后来我最终得到NaN所有0个元素,因为我除以零......)
如何生成行数多于列的随机矩阵?例如,对于行数为列数的整数倍,如10 columns 500 rows,或20 columns 1000 rows等...