小编Dan*_*iel的帖子

属性如何在面向对象的MATLAB中工作?

我正在尝试使用一个成员变量来创建一个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)

oop matlab properties matlab-class

26
推荐指数
3
解决办法
2万
查看次数

MATLAB parfor慢于 - 出了什么问题?

我正在处理的代码有如下循环:

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:我在四核上运行代码,所以我希望看到一些改进.

parallel-processing performance matlab parfor

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

为什么重塑如此之快?

我有一个大的矩阵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)

performance matlab matrix vectorization octave

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

在matlab函数中注释掉一行的某些部分

正如问题所示,我想在MATLAB中注释出一行的某些部分.

另外,我想要评论一行的某些部分,直到行尾.

原因是,我必须尝试两个不同版本的一行,我不想复制该行两次.我知道如果我复制该行很容易评论/取消注释,但我想这样做.

matlab comments

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

numpy.polyfit不处理NaN值

我对这段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元素.

python numpy nan

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

在MATLAB中绘制给定MVN的多元法线PDF的轮廓?

我有一个双变量高斯我定义如下:

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是一个方阵.我该如何解决这个问题?我很困惑,不知道如何绘制双变量高斯的轮廓!! 任何帮助是极大的赞赏..

谢谢

matlab normal-distribution gaussian contour

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

为什么x\y比(x'*x)\(x'*y)慢得多?

对于NxP矩阵xyN> 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)

performance matlab

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

Matlab - 单输出扩展两个以上的输入

我有一个函数,它接收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是否可行.

matlab vectorization bsxfun

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

如何在matlab中退出两个嵌套的for循环

我有一个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中有类似标签的语句,还是有其他方法可以做到这一点?

matlab loops

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

用对角矩阵替换矩阵中的每个元素

假设我有一个尺寸为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中完成这个?(制作每个对角矩阵并连接它们将永远).

非常感谢^^

matlab matrix vectorization

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