我的问题很简单:我有一个使用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)
这应绘制一个漂亮的三相电源的理想波形.
在Matlab中创建视频的可能性有哪些?我正在搜索并发现主要有3个工具箱可以在这个领域工作,图像处理,图像采集和控制视觉......但是如果没有它们我怎么能这样做,只是从头开始创建视频?我对各种方法感兴趣,但是我无法在互联网上找到任何体面的教程或一致的信息来源.
谢谢您的帮助!
我想在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中添加一个包含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是:
但我得到的PDF是:
我在运行OS 10.12.5的Mac上使用Matlab版本R2017a.在此先感谢您的帮助!
在我的模型中,要完成的最重复的任务之一是计算数组中每个元素的数量.计数来自一个闭集,所以我知道有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 .
实现这一目标的最快方法是什么?
我有4个网格:
kgrid 这是[77x1]x 这是[15x1]z 这是[9x1]s 这是[2x1]然后我有一个功能:
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)
这个插值的问题是,给出的输出是所有组合ksim和zsim,这意味着输出为750x750.我确实需要750x1的输出,在所有组合意味着代替插值ksim和zsim我只需要在插值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)
我知道我可以使用这个输出,然后只选择我想要的数字,但这是非常低效的,因为它实际上插入我实际上不需要的所有其他点.任何帮助赞赏.
给定Matlab箱图的.fig文件(即底层数据不可用),是否可以更改PlotStyle属性(从"传统"到"紧凑")?
举例来说,如果我有三个表达式:A,B和C如下:
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)
其中k和h是一些常数,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它的前一个值和之前的C值AC在以前的值A和B我想聚集大量的数据记录.我正在处理的数据是字符串类型.群集过程需要很长时间.
让我们假设我想将一组电子邮件数据记录集群到集群中,同一个人写的电子邮件被分配到同一个集群(考虑到一个人可能以不同的方式写下他/她的名字).
我想执行多阶段群集:
计算成对距离.现在我正处于聚类阶段.我想使用以下代码进行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)