我正在尝试使用一个成员变量来创建一个MATLAB类,该变量由于方法调用而被更新,但是当我尝试更改类中的属性时(显然,从我从MATLAB的内存管理中理解的)创建一个副本对象然后修改它,保持原始对象的属性不变.
classdef testprop
properties
numRequests=0;
end
methods
function Request(this, val)
disp(val);
this.numRequests=this.numRequests+1;
end
end
end
Run Code Online (Sandbox Code Playgroud)
.
>> a=testprop;
>> a.Request(9);
>> a.Request(5);
>> a.numRequests
ans = 0
Run Code Online (Sandbox Code Playgroud) 我正在处理的代码有如下循环:
bistar = zeros(numdims,numcases);
parfor hh=1:nt
bistar = bistar + A(:,:,hh)*data(:,:,hh+1)' ;
end
Run Code Online (Sandbox Code Playgroud)
小nt(10).
计时后,它实际上比使用常规循环慢100倍!我知道parfor可以做并行总和,所以我不确定为什么这不起作用.
我跑
matlabpool
Run Code Online (Sandbox Code Playgroud)
在运行我的代码之前使用开箱即用的配置.
我对matlab比较陌生,刚开始使用并行功能,所以请不要认为我没有做一些愚蠢的事情.
谢谢!
PS:我在四核上运行代码,所以我希望看到一些改进.
我有一个大的矩阵A,它是1GB的双倍值,当我将它重塑为不同的尺寸时,它的速度令人难以置信.
A=rand(128,1024,1024);
tic;B=reshape(A,1024,128,1024);toc
Elapsed time is 0.000011 seconds.
Run Code Online (Sandbox Code Playgroud)
怎么这么快?另一个观察结果是,运行该代码并存储两个1GB的矩阵后,MATLAB使用的内存少于应有的内存:Memory used by MATLAB: 1878 MB (1.969e+09 bytes)
正如问题所示,我想在MATLAB中注释出一行的某些部分.
另外,我想要评论一行的某些部分,直到行尾.
原因是,我必须尝试两个不同版本的一行,我不想复制该行两次.我知道如果我复制该行很容易评论/取消注释,但我想这样做.
我对这段Python代码有疑问:
import matplotlib
matplotlib.use("Agg")
import numpy as np
import pylab as pl
A1=np.loadtxt('/tmp/A1.txt',delimiter=',')
A1_extrema = [min(A1),max(A1)]
A2=np.loadtxt('/tmp/A2.txt',delimiter=',')
pl.close()
ab = np.polyfit(A1,A2,1)
print ab
fit = np.poly1d(ab)
print fit
r2 = np.corrcoef(A1,A2)[0,1]
print r2
pl.plot(A1,A2,'r.', label='TMP36 vs. DS18B20', alpha=0.7)
pl.plot(A1_extrema,fit(A1_extrema),'c-')
pl.annotate('{0}'.format(r2) , xy=(min(A1)+0.5,fit(min(A1))), size=6, color='r' )
pl.title('Sensor correlations')
pl.xlabel("T(x) [degC]")
pl.ylabel("T(y) [degC]")
pl.grid(True)
pl.legend(loc='upper left', prop={'size':8})
pl.savefig('/tmp/C123.png')
Run Code Online (Sandbox Code Playgroud)
A1和A2是包含来自不同传感器的温度读数的阵列.我想找到两者之间的相关性并以图形方式显示.但是,偶尔会发生传感器读取错误.在这种情况下,将NaN插入其中一个文件而不是温度值.然后np.polyfit
拒绝适合数据并返回[nan, nan]
结果.之后所有其他都失败了.
我的问题:我如何说服numpy.polyfit
忽略NaN值?注意:数据集目前相对较小.我希望它们一旦部署就可能增长到大约200k ... 600k元素.
我有一个双变量高斯我定义如下:
I=[1 0;0 1];
mu=[0,0];
sigma=0.5*I;
beta = mvnrnd(mu,sigma,100); %100x2 matrix where each column vector is a variable.
Run Code Online (Sandbox Code Playgroud)
现在我想绘制上述矩阵的pdf轮廓.我做了什么:
Z = mvnpdf(beta,mu,sigma); %100x1 pdf matrix
Run Code Online (Sandbox Code Playgroud)
现在我想绘制双变量高斯beta的轮廓.我知道我应该使用命令轮廓,但这个要求Z是一个方阵.我该如何解决这个问题?我很困惑,不知道如何绘制双变量高斯的轮廓!! 任何帮助是极大的赞赏..
谢谢
对于NxP矩阵x
和y
N> 1的Nx1向量,这两个表达式
x \ y -- (1)
Run Code Online (Sandbox Code Playgroud)
和
(x' * x) \ (x' * y) -- (2)
Run Code Online (Sandbox Code Playgroud)
两者都计算b
矩阵方程的解
x * b = y
Run Code Online (Sandbox Code Playgroud)
在最小二乘意义上,即使数量
norm(y - x * b)
Run Code Online (Sandbox Code Playgroud)
最小化.表达式(2)使用经典算法来解决普通最小二乘回归,其中\
运算符的左手参数是正方形.它相当于写作
inv(x' * x) * (x' * y) -- (3)
Run Code Online (Sandbox Code Playgroud)
但它使用的算法在数值上更稳定.事实证明,(3)比(2)适度快,即使(2)不必产生作为副产物的逆矩阵,但我可以接受给定额外的数值稳定性.
然而,一些简单的时间(N = 100,000和P = 30)表明表达式(2)比表达式(1)快5倍以上,即使(1)具有更大的灵活性来选择所使用的算法!例如,对(1)的任何调用都可以调度X的大小,在N> P的情况下,它可以减少到(2),这会增加很少的开销,但肯定不会花费5倍更长的时间.
表达式(1)中发生了什么导致它花了这么长时间?
编辑:这是我的时间
x = randn(1e5, 30);
y = randn(1e5,1);
tic, for i = 1:100; x\y; end; t1=toc;
tic, for i = 1:100; (x'*x)\(x'*y); end; t2=toc; …
Run Code Online (Sandbox Code Playgroud) 我有一个函数,它接收2个以上的变量
例如.
testFunction = @(x1, x2, x3, x4) x1.*x2.*x3.*x4;
testFunction2 = @(x1, x2, x3) sin(x1.*x2.^x3);
Run Code Online (Sandbox Code Playgroud)
有没有可用的功能bsxfun
允许单个扩展功能有多于2个输入?
的例子 bsxfun
binaryTestFunction = @(x1, x2) x1.*x2;
x1 = 9*eye(10);
x2 = 3*ones(10,1);
A = bsxfun(binaryTestFunction , x1 , x2);
Run Code Online (Sandbox Code Playgroud)
扩展x2向量中的单例维度.
bsxfun
比repmat更快,也是高度迭代的,因此我想知道单例扩展testFunction
是否可行.
我有一个while
循环,我有两个for
循环.我在最里面的for
循环中有一个条件.只要满足该条件,我想退出两个for
循环并继续while
循环:
while (1)
for x=1:20
for y=1:30
if(condition)
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
Matlab在Java中有类似标签的语句,还是有其他方法可以做到这一点?
假设我有一个尺寸为NxV的矩阵A. 我想创建一个更大的矩阵大小为NTxVT,即我想用diag(T)*A(e)替换矩阵A(e)的每个元素e,同时保持矩阵的一般方向(例如, A(e)位于A(e-1)的左侧,因此diag(T)*A(e)位于diag(T)*A(e-1)的左侧.
有没有一个技巧可以在matlab中完成这个?(制作每个对角矩阵并连接它们将永远).
非常感谢^^