小编EBH*_*EBH的帖子

从eclipse运行时,关闭matplotlib中预先存在的数字

我的问题很简单:我有一个使用matplotlib生成数字的python脚本.每次我运行它都会生成带有数字的新窗口.如何让脚本关闭上次运行时打开的窗口?

matlab中的类似命令是在matlab脚本的开头放置"关闭所有".

我已经看到了一些建议来做类似的事情

import matplotlib.pyplot as plt
plt.close("all")
Run Code Online (Sandbox Code Playgroud)

如果您从python shell运行脚本,例如使用,则此解决方案有效

>>>> execfile("myScript.py")
Run Code Online (Sandbox Code Playgroud)

但是,我发现如果我使用Eclipse/PyDev运行脚本,这不起作用.我怎样才能让它在Eclipse中运行?

例:

from numpy import *
from matplotlib.pyplot import *
from scipy import *

close("all") 
    #close any previously open plots - this doesn't work when running via Eclipse

t = linspace(0, 0.1,1000)
w = 60*2*pi

figure()
plot(t,cos(w*t))
plot(t,cos(w*t-2*pi/3))
plot(t,cos(w*t-4*pi/3))
show()
Run Code Online (Sandbox Code Playgroud)

这应绘制一个漂亮的三相电源的理想波形.

python numpy matplotlib pydev

65
推荐指数
1
解决办法
14万
查看次数

在matlab中创建视频的方法

在Matlab中创建视频的可能性有哪些?我正在搜索并发现主要有3个工具箱可以在这个领域工作,图像处理,图像采集和控制视觉......但是如果没有它们我怎么能这样做,只是从头开始创建视频?我对各种方法感兴趣,但是我无法在互联网上找到任何体面的教程或一致的信息来源.

谢谢您的帮助!

video matlab

28
推荐指数
4
解决办法
6万
查看次数

有没有办法执行一段时间?

我打算do-while在MATLAB中使用循环.
有没有办法做到这一点?

matlab loops do-while

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

我怎么能让我的堆栈溢出?

我想在Matlab中制作一个条形图,其中一个类别是"突破顶部"的轴,超过y轴限制,但我无法想象如何做到这一点.当我将上限更改为较低值时,栏会被卡车.

我能做什么?

这是我的数据:

data =
   115   116    97    99   107   NaN   NaN   NaN
   111   118   101   114   102   108   111   119
Run Code Online (Sandbox Code Playgroud)

我希望上y轴限制为600.

这是我尝试过的:

bar(data,0.5,'stack')
ylim([0 600])
Run Code Online (Sandbox Code Playgroud)

以下是结果的演示:

堆栈没有溢出

matlab plot axes bar-chart matlab-figure

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

当图形保存为PDF时,为什么Matlab使用Latex在文章中放置文本空间?

我试图在Matlab中添加一个包含Latex中符号的图例.当我绘制图形时,图例看起来很好.但是,当我将图形导出为PDF时,图例会将空格放入其中.我不知道为什么会这样.示例代码如下:

set(groot,'defaultLineLineWidth',2,'defaultAxesFontSize',...
    12,'defaultAxesFontName','timesnewroman',...
    'defaulttextinterpreter','latex')
x0 = 8;
y0 = 5;
width = 5;
height = 4;
kappa1 = 0.1;
kappa2 = 0.5;
f = linspace(0,2*pi,1000);
y1 = sin(f+kappa1*f.^2);
y2 = sin(f+kappa2*f.^2);

figure(1)
hold on
plot(f,y1,'k')
plot(f,y2,'b')
xlabel('Frequency (MHz)')
ylabel('Amplitude')
legend(strcat('\kappa = 0.1 MHz/','\mu','s'),...
    strcat('\kappa = 0.5 MHz/','\mu','s'))
grid on;
set(gcf,'units','inches','Position',[x0,y0,width,height],...
    'PaperPositionMode','Auto','PaperUnits','Inches',...
    'PaperSize',[width, height]);
saveas(gcf,'legendtest.pdf')
Run Code Online (Sandbox Code Playgroud)

将文件另存为PDF时,似乎发生了错误.它保存为JPG就好了.以下是我得到的两张照片.jpg是:

testlegendjpg

但我得到的PDF是:

在此输入图像描述

我在运行OS 10.12.5的Mac上使用Matlab版本R2017a.在此先感谢您的帮助!

pdf matlab latex legend matlab-figure

9
推荐指数
2
解决办法
657
查看次数

计算数组中元素的最快方法是什么?

在我的模型中,要完成的最重复的任务之一是计算数组中每个元素的数量.计数来自一个闭集,所以我知道有X各种类型的元素,并且全部或部分元素填充数组,以及代表"空"单元格的零.数组没有以任何方式排序,并且可能相当长(大约1M个元素),并且在一次模拟期间(这也是数百次模拟的一部分),该任务完成了数千次.结果应该是r大小的向量,数组中的数量也是X如此.r(k)k

例:

因为X = 9,如果我有以下输入向量:

v = [0 7 8 3 0 4 4 5 3 4 4 8 3 0 6 8 5 5 0 3]
Run Code Online (Sandbox Code Playgroud)

我想得到这个结果:

r = [0 0 4 4 3 1 1 3 0]
Run Code Online (Sandbox Code Playgroud)

请注意,我不希望计数零,并且未出现在数组中的元素(如2)0在结果向量(r(2) == 0)的相应位置具有a .

实现这一目标的最快方法是什么?

arrays performance matlab count binning

7
推荐指数
2
解决办法
1238
查看次数

Interpn - 改变输出

我有4个网格:

  1. kgrid 这是[77x1]
  2. x 这是[15x1]
  3. z 这是[9x1]
  4. s 这是[2x1]

然后我有一个功能:

  1. kprime 这是[77x15x9x2]

我想kprime在某些点插值ksim (750 x 1)并且zsim (750 x 1)(xsim是标量).我在做:

[ks, xs, zs, ss] = ndgrid(kgrid, x, z, [1;2]);
Output = interpn(ks, xs, zs, ss, kprime, ksim, xsim, zsim, 1,'linear');
Run Code Online (Sandbox Code Playgroud)

这个插值的问题是,给出的输出是所有组合ksimzsim,这意味着输出为750x750.我确实需要750x1的输出,在所有组合意味着代替插值ksimzsim我只需要在插值ksim(1,1)zsim(1,1),然后ksim(2,1)zsim(2,1),然后ksim(3,1)zsim(3,1)

换句话说,在Output我做完之后:

Output = diag(squeeze(Output));
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用这个输出,然后只选择我想要的数字,但这是非常低效的,因为它实际上插入我实际上不需要的所有其他点.任何帮助赞赏.

performance matlab interpolation vectorization

7
推荐指数
2
解决办法
230
查看次数

如何更改给定boxplot数字的'PlotStyle'属性?

给定Matlab箱图的.fig文件(即底层数据不可用),是否可以更改PlotStyle属性(从"传统"到"紧凑")?

matlab boxplot matlab-figure

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

如何编码依赖于其他矢量化表达式的矢量化表达式?

举例来说,如果我有三个表达式:A,BC如下:

A(i+1) = A(i) + C(i).k
B(i+1) = B(i) + A(i).h
C(i+1) = A(i) + B(i)
Run Code Online (Sandbox Code Playgroud)

其中kh是一些常数,m并且n是所需的大小C.i是先前获得的值,i+1是下一个值.现在,如果我使用for循环,那么我可以将其编码为:

A(1)= 2;
B(1)= 5;
C(1)= 3;
for i=1:10
    A(i+1) = A(i) + C(i)*2;
    B(i+1) = B(i) + A(i)*3;
    C(i+1) = A(i) + B(i);
end
Run Code Online (Sandbox Code Playgroud)

它工作得很好.但我想用矢量形式编码,就像在不必使用循环一样.但问题是我不知道如何绕过依赖:

  • A在其先前的值和以前的C
  • B它的前一个值和之前的CA
  • C在以前的值AB

matlab vectorization

5
推荐指数
2
解决办法
133
查看次数

Matlab:如何自定义聚类代码作为多级聚类?

我想聚集大量的数据记录.我正在处理的数据是字符串类型.群集过程需要很长时间.
让我们假设我想将一组电子邮件数据记录集群到集群中,同一个人写的电子邮件被分配到同一个集群(考虑到一个人可能以不同的方式写下他/她的名字).
我想执行多阶段群集:

  • 基于名称的第一阶段聚类,如果两个记录之间的名称距离小于阈值,我们会考虑这些聚类......
  • 数据记录基于其他属性(名称除外)进入群集的第二阶段.

计算成对距离.现在我正处于聚类阶段.我想使用以下代码进行dbscan群集:

function [IDX, isnoise] = dbscan_strings(X,epsilon,MinPts)
C = 0;
n = size(X,1); 
IDX = zeros(n,1);
D = pdist2(X,X,@intersection);
visited = false(n,1);
isnoise = false(n,1);
for i = 1:n
    if ~visited(i)
        visited(i) = true;
        Neighbors = RegionQuery(i);
        if numel(Neighbors)<MinPts
            % X(i,:) is NOISE
            isnoise(i) = true;
        else
            C = C+1;
            ExpandCluster(i,Neighbors,C);
        end
    end
end

function ExpandCluster(i,Neighbors,C)
    IDX(i) = C;
    k = 1;
    while true
        j = Neighbors(k);
        if ~visited(j)
            visited(j) = true;
            Neighbors2 = …
Run Code Online (Sandbox Code Playgroud)

matlab cluster-analysis multistage

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