小编Fre*_*ick的帖子

如何在MATLAB中删除变量"clear"

假设你是一个新的程序员,你做的事情就像......

%...la da da
%...programming away
if such && such
    clear = 1;
else 
    clear = 0;
end 
Run Code Online (Sandbox Code Playgroud)

或者以其他方式,为变量clear赋值.

有没有办法"清除" clear

clearvars不起作用.单击工作区变量并手动单击删除确实有效,但我认为这是作弊.

matlab clear

18
推荐指数
2
解决办法
991
查看次数

控制matlab函数中详细程度的想法/最佳实践

假设我有some_fun做了一些复杂的工作.

function foo = some_complicated_fun(x,y,z,verbosity)
Run Code Online (Sandbox Code Playgroud)

我已经在这段代码中编写了很多调试打印件,但是avg用户可能没有兴趣看到它是否正常工作.无论如何都会打印错误语句(不够args等).

我目前编写函数的方法是:

function foo = some_complicated_fun(x,y,z,verbosity)

(x,y,z,verbosity) = parse_args(x,y,z,verbosity); % parse args, check nargin, etc

for i=1:5, 

    % whatever    
    % do some work with x,y,z
    % blah blah

    if verbosity 
        fprintf('Now on iteration %i\n',i); % basic print
    end

    % or, with mutiple levels:
    if verbosity == 1;
        fprintf('Now on iteration %i\n',i); % basic print
    end
    if verbosity == 2;
        fprintf('x = %f,y = %f,z=%f %i\n',x,y,z); % more information
    end

    % do more work

end
Run Code Online (Sandbox Code Playgroud)

我不喜欢用if语句来做它,因为它使代码混乱,但我想不出任何其他方式.一个班轮越来越好: …

matlab printf verbosity clarity

6
推荐指数
1
解决办法
1717
查看次数

如何在MATLAB中实现订单分析

我有一个代表电机声音的音频文件.我一直在读"正常"fft没有对机器进行有价值的分析,我应该使用Order分析来描述机器的"行为".我在增加速度的同时记录了它的声音,我将记录放在一起并计算出它的频谱.这是代码:

%% read the Audio file and plot its 
clear, clc , clf;
M = 512;
k =1 
data= 0 ;
   for i =100:5:180
    fileName =['A10_uSp0_Mic100k_2nd_V_',int2str(i),'.wav']
    [x(:,k),Fs] = audioread(fileName);
    k = k+1 ;
end
for i = 1:length(x(1,:))
    data = [data(:);x(:,i)];
end
 k = length(x(1,:));
    while k ~= 2
   data = [data(:);x(:,k)];
   k = k -1;
    end
spectrogram(data,hamming(M),M/2,0:20:4000,Fs,'yaxis');
Run Code Online (Sandbox Code Playgroud)

结果如下:

频谱图

正如您可能看到的那样,我为每个时间点将机器的速度提高了5.我的问题是如何计算该系统的订单分析!?非常感谢您的帮助!

matlab signal-processing

6
推荐指数
1
解决办法
1428
查看次数

在MATLAB中优化重复估计(当前是一个循环)

我发现自己需要对图像中的每个像素进行最小二乘(或类似的基于矩阵的操作).每个像素都有一组与之关联的数字,因此可以将其排列为3D矩阵.

(可以跳过下一位)

通过最小二乘估计快速解释我的意思:

假设我们有一些二次系统,它由Y = Ax ^ 2 + Bx + C建模,我们正在寻找那些A,B,C系数.使用X的几个样本(至少3个)和相应的Y,我们可以通过以下方式估算它们:

  1. 将(例如10个)X样本排列成矩阵 X = [x(:).^2 x(:) ones(10,1)];
  2. 将Y个样本排列成类似的矩阵: Y = y(:);
  3. 通过求解来估算系数A,B,C: coeffs = (X'*X)^(-1)*X'*Y;

如果您愿意,可以自己尝试:

A = 5; B = 2; C = 1;
x = 1:10;
y = A*x(:).^2 + B*x(:) + C + .25*randn(10,1); % added some noise here
X = [x(:).^2 x(:) ones(10,1)];
Y = y(:);
coeffs = (X'*X)^-1*X'*Y

coeffs =

  5.0040
  1.9818
  0.9241
Run Code Online (Sandbox Code Playgroud)

如果我迷失了你,请继续注意

*MAJOR REWRITE*我已修改为使其接近我所拥有的真正问题,并仍然使其成为最小的工作示例.

问题设置

%// Setup
xdim …
Run Code Online (Sandbox Code Playgroud)

math optimization matlab matrix least-squares

3
推荐指数
1
解决办法
536
查看次数

在 3d 空间中的两个平面之间进行插值

我正在开发一种工具,可以让您在 3D“体积”上圈出/包围事物。我想通过标记“切片”1 和 3 并从该信息“填充”切片 2 来节省时间。

两个简单的解决方案是:

1. slice2 = slice1 AND slice3 (gets the overlap between the two)
2. slice2 = slice2 OR  slice3 (true for any pixel true in either image)
Run Code Online (Sandbox Code Playgroud)

这些都很好而且很快,但我更喜欢通过使形状在两者之间进行某种平均/插值来做一些更智能的事情。您可以将其想象为试图找到连接海平面飞机和空中高原的悬崖面。

示例:填充此 3d 矩阵中的切片 2-4。(使用创建montage从一到五片

随意想出全新的想法。我将把我的想法放在下面。

我想到的一些东西可能会对你(回答者)有所帮助,但我未能成功使用。

  • 您可以对每个图像执行 bwperim。
  • 您可以尝试对图像进行“平均”(或加权平均)。

到目前为止我得到的最好的:

添加图像。给你重叠和两个周长:
- 一个内周长(其内部肯定是 1)
- 和一个外周长(其内部是有问题的)。
您还可以屏蔽 >0 AND <2 的区域,这是该可疑区域的屏蔽。在两周边图像上
运行 a并遮罩:bwdist

![蒙版 bwdist 图像] 2

但不知道如何从这里出发。沿着该区域绘制“最大”轮廓的线是可行的,但我不确定如何稳健地做到这一点。

欢迎任何关于修正我的想法或任何其他想法的想法!

谢谢。

math 3d matlab contour spatial-interpolation

2
推荐指数
1
解决办法
4044
查看次数

Python:在目录中解析和分组文件名

我是python的新手,但我有很多MATLAB和C的经验.

我需要做的是解析特定目录中文件的文件名,根据文件名中的字段将它们分成组,并在这些组中执行操作.

具体来说,文件名是:

PROJECT-x-SUBJECT-x-SESSION-x-TYPE.extension
Run Code Online (Sandbox Code Playgroud)

其中'-x-'被故意插入为字段分隔符.我需要对共享相同PROJECT-x-SUBJECT-x-SESSION组件的每组文件执行操作.

__ _ ____ 我最好的尝试如下:__ _ __ _ __

我可以通过以下方式一次解析每个文件:

dirList=os.listdir(directory)
for fname in dirList:  
    # kill extension
    ext = os.path.splitext(fname)
    # get the 4 fields 
    labels=ext[0].split('-x-')
    PROJECT_list.append(labels[0])
    SUBJECT_list.append(labels[1])
    ...
Run Code Online (Sandbox Code Playgroud)

...这反映了我对如何组织这些东西的唯一想法:通过创建4个列表并为每个文件名附加到它们.

然后用我的4(有序?)列表,我可以调用类似的东西:

from collections import Counter
c=Counter(SESSION_list) 
list(c)
Run Code Online (Sandbox Code Playgroud)

那么至少我有一个唯一的SESSION名称列表

建议?我可以继续,但因为我真的需要一个起点,我认为这已经足够了.

多谢你们.

python directory parsing

1
推荐指数
1
解决办法
4876
查看次数