小编Dev*_*-iL的帖子

创建一个用户可以选择文件或文件夹的对话框

在MATLAB中,有一个提示用户选择一个或多个文件uigetfile的功能- 还有另一个允许用户选择文件夹的功能 - uigetdir.

我想向用户提供选择的能力或者一个文件文件夹,使用单一窗口,因为这是对UX我试图创造重要.

到目前为止,我发现使用上述功能1的唯一解决方案需要额外的步骤,要求用户提前选择他们想要选择的实体类型,并相应地调用相应的功能 - 我觉得不方便.

那我怎么能有一个允许我选择其中一个的对话框呢?

matlab user-interface user-experience filechooser matlab-gui

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

在MATLAB中绘制体积数据

我在Matlab工作,我有一个尺寸为384x512x160的3d矩阵,由384x512切片组成.

我该如何绘制这样的数据?

3d matlab plot visualization 3d-reconstruction

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

文本"范围"属性不包含正确的大小

我想在GUI中放置一些文本,我想知道uicontrol类型的确切大小'text'!

我发现有几个线程解释说这可以使用包含相同文本'Extent''text'对象的属性来完成,参见示例:

function form = tempfunc(txt,font,fontsize)
    if nargin <3
        fontsize = 10;
    end
    if nargin < 2
        font = 'courier';
    end
    f = figure('Visible','off','Units','pixels');
    u = uicontrol(f,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize);
    textsize = get(u,'Extent');
    textsize = textsize(3:4);
    close(f);

    form = figure('Units','pixels');
    uicontrol(form,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize,'Position',[5,5,textsize]);
end
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,这不起作用.当我运行上面的内容时,tempfunc(repmat('A',14));我得到下面的图窗口:

在此输入图像描述

从图像中可以看出,textsize变量中提取的文本的高度太小了!

请注意,这是我在运行Matlab R2014a的Windows计算机上运行程序时得到的结果.我后来在运行Matlab R2013b的Linux机器上运行完全相同的代码,在那台机器上我得到了我想要的结果.

我正在制作的GUI应该(希望)能够在任何计算机上运行,​​但是现在我真的不知道如何继续制作适用于任何机器的版本,所以请帮助我!

编辑: 我试图在运行Matlab R2011b(而不是我的R2014a)的另一台Windows 7机器(这次是Ultimate版本而不是我的企业版)上运行相同的代码,它仍然产生错误的文本框高度 - 但这一次文字框太高 - 见图片:

在此输入图像描述

编辑2: 我终于安装了R2014b,但遗憾的是它没有帮助!我看到了类似的图片:

在此输入图像描述

我还试图看看我的屏幕分辨率的不同选择是否有所不同 - 他们没有.

EDIT3:

我注意到不同的字体在高度上产生不同的错误,例如默认字体(MS Sans Serif)产生的文本框太高(并且随着更多行的添加,这个高度错误也会增加) - 在Linux上然而我得到了我尝试的所有字体的正确结果.

但我真正感兴趣的是使用快递字体的情况,因为我需要一个等宽字体用于我的目的.

windows matlab user-interface matlab-figure matlab-java

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

功能句柄内部的逻辑短路

我有一个函数句柄,可以在任意大小的2d数组上运行:

R2T = @(DL1,DL2) arrayfun(@(DL1,DL2)...
                 1/(fzero(@(x)fFitObj1(x)./fFitObj2(x)-...
                 DL1./DL2,[minLim maxLim])) ...
                 ,DL1,DL2) - C1;
Run Code Online (Sandbox Code Playgroud)

这是一个自下而上的细分:

  • fzero(@(x)fFitObj1(x)./fFitObj2(x)-DL1./DL2,[minLim maxLim])- 该位在间隔上查找所考虑函数的零[minLim maxLim],其中fFitObj1fFitObj2是之前可用的函数句柄,C1是一些已知的常量并且DL1, DL2被提供.
  • @(DL1,DL2)1/(fzero(...))- fzero允许DL1DL2从外部提供的包装.
  • arrayfun(@(DL1,DL2)...,DL1,DL2)- 另一个包装器,允许fzeroDL1, DL2作为矩阵提供时逐个元素地正确操作.
  • R2T = @(DL1,DL2) arrayfun(...) - C1;- 另一个允许DL1, DL2从外部提供的包装器.

我的问题是有时矩阵DL1, DL2可能包含NaN值,在这种情况下fzero返回以下错误:

Error using fzero (line 242)
Function values at interval endpoints must be finite and real.
Run Code Online (Sandbox Code Playgroud)

这就是为什么我自然想到了可用的 …

matlab anonymous-function lazy-evaluation short-circuiting logical-operators

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

绘制顶轴(方框)线

我有一个有两条线和两个不同的x轴(不同的数据单元)的情节,我的情节如下所示.

我的问题是我想把盒子的顶部线条也画成黑色(水平),而不是像它那样"开放".如果线具有x轴刻度也是很好的,与底部水平轴线相同.

显然,grid on不起作用,因为它在右侧绘制y1轴刻度,在左侧绘制y2轴刻度,这是我不想要的.

另外,我认为在Matlab 2014中,这有效:set(ax(2),'XAxisLocation','top','XTickLabel',[]);但它在Matlab 2015a中已不复存在了.

这是一个例子:

figure(1);
x = [0, 1, 2, 3];
y_1 = [3, 2, 1.5, 1];
y_2 = [0, 0.5, 0.7, 0.9];
parula_blue = [0, 0.447, 0.741]; parula_red = [0.85, 0.325, 0.098];

[ax, h1, h2] = plotyy(x, y_1, x, y_2);
set(get(ax(1),'Ylabel'),'String','Data 1', 'Color', 'k');
set(h1,'LineWidth',2,'LineStyle','-','Color',parula_blue,'DisplayName', 'Name 1');
set(ax(1),'ycolor',parula_blue);
set(ax(1), 'YTick', [0 1 2 3 4]);
set(ax(1), 'ylim', [0 4]);

set(get(ax(2),'Ylabel'),'String','Data 2', 'Color', 'k');
set(h2,'LineWidth',2,'LineStyle','--','Color',parula_red,'DisplayName','Name 2');
set(ax(2),'ycolor',parula_red);
set(ax(2),'YDir','reverse');
set(ax(2), 'YTick', [0 0.2 …
Run Code Online (Sandbox Code Playgroud)

matlab matlab-figure matlab-hg2

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

如何在MATLAB中验证formatSpec字符串?

许多在MATLAB(以及其他语言,有一个C衍生的功能scanf/ printf)用于写入或读取字符串(仅举几例:sscanf,sprintf,textscan)依靠用户提供有效的formatSpec,它告诉函数的结构字符串string-to-build或string-to-parse.我正在寻找一种方法来验证这样一个formatSpec字符串,然后在调用中sprintf使用它.

在这种情况下sprintf,文档中formatSpec描述的结构如下:

MATLAB的sprintf formatSpec

具体来说,我想指出两个方面formatSpec:

  • (✓)格式化运算符以百分号开头%,以转换字符结束.
  • (x)formatSpec还可以在百分号之前%,或在转换字符之后包含其他文本.

我正在考虑的解决方案涉及使用正则表达式来测试传入的字符串.到目前为止我所拥有的是一个似乎能够匹配初始字符%转换字符之间的所有内容的表达式,而不是可能出现的"附加文本".

(%{1}(\d+\$)?[-+\s0#]*(\d+|\*)?(\.\d+)?[bt]?[diuoxXfeEgGcs]+)+
Run Code Online (Sandbox Code Playgroud)

我想也增加了拍摄的能力."任何可打印文本字符之外%,'并且\,除非这些字符恰好出现两次".这需要%转换字符之前和之后捕获.

  • 任何可打印的字符:[ -~]
  • 此外%,'\:(?![\\%'])
  • 这些字符恰好出现两次 : ( §§§§ |'{2}|\\{2}|%{2})(§=占位符)

我遇到了" 除非 " 的问题,即获得负面预测以丢弃单次出现但允许指定字符的双重出现.

我有两个问题:

  1. 有没有更好的方法来验证 …

regex string validation matlab printf

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

如何以比官方记录更多的方式自定义App Designer数据?

最近在UndocumentedMatlab上发表的一篇文章提到App Designer图实际上是使用Dojo Toolkit的网页.这意味着我们理论上可以直接操作HTML DOM来实现某些不可用的UI自定义.

下面是App Designer图形定义的示例,如.mApp Designer生成的文件中所示(在MATLAB R2016a上):

classdef domDemo < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        UIFigure     matlab.ui.Figure          % UI Figure
        LabelListBox matlab.ui.control.Label   % List Box
        ListBox      matlab.ui.control.ListBox % Item 1, Item 2, Item 3, It...
    end

    methods (Access = private)

        % Code that executes after component creation
        function startupFcn(app)

        end
    end

    % App initialization and construction
    methods (Access = private) …
Run Code Online (Sandbox Code Playgroud)

matlab dojo customization undocumented-behavior matlab-app-designer

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

继承MATLAB中的密封类

在MATLAB中,类的一个属性(后面定义classdef)是Sealed,这意味着没有类可以将它用作超类(或者更确切地说," 表示这些类没有被设计为支持子类. " 1).

例如,如果我尝试实例化一个定义如下的类(考虑tableSealed):

classdef SomeLie < table

end
Run Code Online (Sandbox Code Playgroud)

我会得到'MATLAB:class:sealed'错误:

>> A = SomeLie;
Error using SomeLie
Class 'table' is Sealed and may not be used as a superclass.
Run Code Online (Sandbox Code Playgroud)

由于我拒绝由机器来告诉我可能可能不会做,我想继承一个Sealed,而不管.我怎样才能在MATLAB R2017a中做到这一点?

我很难相信这个系统是完全不透气的,所以我正在寻找一种能够导致该Sealed属性被忽略的解决方案(或类似的东西).所需的解决方案应该无需修改任何"库类定义"即可从中删除Sealed.


我试着玩"反思",但到了死胡同......

classdef SomeLie % < table  
  properties (Access = private)
    innerTable table;
  end

  properties (GetAccess = public)
    methodHandles struct = struct();
  end …
Run Code Online (Sandbox Code Playgroud)

oop matlab inheritance sealed undocumented-behavior

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

使用cellfun替换条件元素

vec = randi(10,10,1)
vec(vec < 5) = 0

func = @(x) x(x < 5) = 0    % This isn't valid
Run Code Online (Sandbox Code Playgroud)

我该如何将第二行代码转换为可以与之结合使用的函数句柄cellfun

matlab anonymous-function function-handle cell-array elementwise-operations

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

如何在Windows中使用python 3.11安装Ta-lib?

TA-Lib Windows 发行版来自此处https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib,但仅支持到 3.10。如何在Windows中使用python 3.11安装Ta-lib?

自述文件中有关在 Windows 上安装的说明

下载ta-lib-0.4.0-msvc.zip并解压到C:\ta-lib.

这是一个 32 位二进制版本。如果您想使用 64 位 Python,则需要构建 64 位版本的库。在 64 位 Windows 10 上构建的一些非官方(且不受支持)说明,此处供参考:

  1. 下载并解压ta-lib-0.4.0-msvc.zip
  2. 将解压后的文件夹移动ta-libC:\
  3. 下载并安装 Visual Studio Community(2015 或更高版本)
    • 记得选择[Visual C++]功能
  4. 构建 TA-Lib 库
    • 从 Windows 开始菜单,开始[VS2015 x64 Native Tools Command Prompt]
    • 移动to C:\ta-lib\c\make\cdr\win32\msvc
    • 建立图书馆nmake

但是之后:

ERROR: Failed building wheel for TA-Lib
Failed to build TA-Lib
ERROR: Could not build wheels for TA-Lib, which …
Run Code Online (Sandbox Code Playgroud)

python ta-lib python-3.11

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