小编Baz*_*man的帖子

如何在Matlab中找到矩阵是否是奇异的

我使用下面的函数为我的优化器生成一组给定的猜测lambda.

运行时,我经常会收到以下警告消息:

警告:Matrix的工作精度非常高.在NSS_betas at 9 In DElambda at 19 In Individual_Lambdas at 36

我希望能够从解决方案集中排除任何形成单个矩阵的beta,但我不知道如何测试它?

我一直在尝试使用rcond(),但我不知道在奇异和非奇异之间切断的位置?

当然,如果Matlab正在生成警告消息,它已经知道矩阵是否是单数,所以如果我能找到该变量的存储位置,我可以使用它吗?

function betas=NSS_betas(lambda,data)

mats=data.mats2'; 
lambda=lambda;
yM=data.y2';
nObs=size(yM,1);
G= [ones(nObs,1) (1-exp(-mats./lambda(1)))./(mats./lambda(1)) ((1-exp(-mats./lambda(1)))./(mats./lambda(1))-exp(-mats./lambda(1))) ((1-exp(-mats./lambda(2)))./(mats./lambda(2))-exp(-mats./lambda(2)))];

betas=G\yM;
r=rcond(G);

end
Run Code Online (Sandbox Code Playgroud)

感谢您的建议:

在将lambda值设置为相等以便设置单个矩阵之后,我测试了以下所有三个示例

 if (~isinf(G))
  r=rank(G);
  r2=rcond(G);
  r3=min(svd(G)); 
 end
Run Code Online (Sandbox Code Playgroud)

r = 3,r2 = 2.602085213965190e-16; r3 = 1.075949299504113e-15;

所以在这个测试中,rank()和rcond()工作假设我采用下面给出的基准值.

然而,当我有两个接近但不完全相等的值时会发生什么?

我怎样才能决定什么距离太近?

matlab matrix

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

如何在Spyder中使用argv

我在Spyder中运行下面的代码.我在py文件中输入了它,只需点击运行按钮即可.

当我尝试运行它时,我收到错误:

ValueError:需要多于1个值才能解压缩

如图所示,你打算在运行程序之前给出argv变量的输入,但我不知道如何做到这一点是spyder?

http://learnpythonthehardway.org/book/ex13.html

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "The first variable is:", first
print "The second variable is:", second
print "Your third variable is:", third
Run Code Online (Sandbox Code Playgroud)

python spyder

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

Matlab/Octave与EC2

我想将Matlab与EC2一起使用,它基本上是一个令人尴尬的并行问题,所以我不一定需要并行工具箱.

在这里阅读博客:

http://aws.typepad.com/aws/2008/11/parallel-comput.html

白皮书的链接实际上会将您带到一个网页,其中表示该服务仅在美国和加拿大(我是英国)提供,但您可以注册您的兴趣.

此外,似乎许可证可能存在问题?如果我必须为每个CPU购买一个新的许可证,它对我来说是一个非启动器.

我的程序并没有像lsqmin那样使用任何大的MATLAB函数,所以理论上它应该很容易转换为Octave(我认为).

如果由于上述任何原因而无法使用Matlab和EC2,那么有人可以告诉我如何在EC2中使用Octave吗?

function [output]=DElambda(de,data,OF)

 P1=zeros(de.d,de.nP);
 Pu=zeros(de.d,de.nP);

 for i=1:de.d
 P1(i,:)=de.min(i,1)+(de.max(i,1)-de.min(i,1))*rand(de.nP,1);
 end


 P1(:,1:de.d)=diag(de.max);
 P1(:,de.d+1:2*de.d)=diag(de.min);


 for i=1:de.nP
 betas(:,i)=NSS_betas(P1(:,i),data);
 end

 Params=vertcat(betas,P1);

 Fbv=NaN(de.nG,1);
 Fbest=realmax;



 F=zeros(de.nP,1);
 P=zeros(de.nP,1);


for i=1:de.nP 

F(i)=OF(Params(:,i)',data);

P(i)=pen(P1(:,i),de,F(i));
F(i)=F(i)+P(i);


 end

 [Fbest indice] =min(F);
 xbest=Params(:,indice);


Col=1:de.nP; 

for g=1:de.nG
P0=P1;
rowS=randperm(de.nP)';
colS=randperm(4)';
RS=circshift(rowS,colS(1));
R1=circshift(rowS,colS(2));
R2=circshift(rowS,colS(3));
R3=circshift(rowS,colS(4));

%mutate
Pm=P0(:,R1)+de.F*(P0(:,R2)-P0(:,R3));
%extra mutation
if de.R>0 
    Pm=Pm+de.r*randn(de.d,de.nP);
end

%crossover
PmElements=rand(de.d,de.nP)<de.CR;
%mPv(MI)=mP(Mi);
if de.oneElementfromPm
   Row=unidrnd(de.d,1,de.nP);
   ExtraPmElements=sparse(Row,Col,1,de.d,de.nP);
   PmElements=PmElements|ExtraPmElements;
end

P0_Elements=~PmElements;
Pu(:,RS)=P0(:,RS).*P0_Elements+PmElements.*Pm;
%%%need to add penalty!!!!!!!!!!!!
%select vector to enter next generation

for i=1:de.nP
betasPu(:,i)=NSS_betas(Pu(:,i),data);
end



ParamsPu=vertcat(betasPu,Pu); …
Run Code Online (Sandbox Code Playgroud)

cloud matlab distributed-computing octave amazon-ec2

8
推荐指数
1
解决办法
3081
查看次数

MATLAB命令历史记录:如何保存现有历史记录的备份

根据这个链接:

如何将MATLAB命令窗口的内容保存到文件中?

我可以用以下的方式支持我的表扬diary:

但是我还想备份我现有的命令历史记录,我假设命令历史记录存储在某个文本文件中是否正确?如果是这样我可以复制一下吗?

matlab

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

调试R中不同源文件中的函数

我正在使用RStudio,我希望能够在特定的行停止代码执行.

这些函数在第一个脚本文件中定义,并从第二个脚本文件调用.

我使用第一个文件到第二个文件 source("C:/R/script1.R")

我使用从头到尾的运行:我从第二个脚本开始运行,该脚本具有函数调用,并在第一个脚本中突出显示了函数定义所在的行.

然后我browser()用来查看变量.然而,这并不理想,因为涉及一些大的矩阵.有没有办法让这些变量出现在RStudio的工作区中?

此外,当我从一行到另一行重新使用run时,它只运行到被调用的第一个脚本文件的末尾,它不会返回到调用函数并完成第二个文件的运行.

我怎样才能在RStudio中实现这些目标?

好的,这是一个简单的例子,下面的函数加法器在一个脚本中定义

adder<-function(a,b) {  
  browser()
  return(a+b)
 }
Run Code Online (Sandbox Code Playgroud)

我打电话来自第二个剧本

x=adder(3,4)
Run Code Online (Sandbox Code Playgroud)

在第二个脚本中调用adder时,在第一个脚本中启动browser().从这里我可以使用get("a")来获取a的值,但是a和b的值不会出现在RStudio的工作区中?

在这里的例子中它并不重要,但是当你有几个大矩阵时它确实如此.

r rstudio

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

从特征值分解中恢复原始矩阵

根据维基百科,特征值分解应该是这样的:

http://en.wikipedia.org/wiki/Square_root_of_a_matrix

请参阅对角化计算方法部分:

Sp如果矩阵A被分解使得它具有特征向量V和特征值D,则A = VDV'.

A=[1 2; 3 4];
[V,D]=eig(A);
RepA=V*D*V';
Run Code Online (Sandbox Code Playgroud)

但是在Matlab中,A和RepA不相等?

为什么是这样?

巴兹

matlab

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

如何在 RStudio 中为包函数设置断点

要复制此错误,您必须首先安装包 MARSS。我还包括用户指南。

https://cran.r-project.org/web/packages/MARSS/vignettes/UserGuide.pdf

可以使用第 35 页上的示例调用

dat = t(harborSealWA)
dat = dat[2:nrow(dat),]
debugonce(MARSSkem)
kemfit = MARSS(dat)
Run Code Online (Sandbox Code Playgroud)

在 RStudio 中为 MARSSkem 触发 debugmode 时,您会发现无法设置断点!屏幕顶部还有一条调试消息说:“调试位置是近似的,因为源代码不可用”。我想这就是我不能设置断点的原因!

问题是我试图定位的错误(在所示的简单示例中不存在)是在第 55 次迭代中发现的,并且每次迭代都包含多个 for 循环,每个循环有 100 个循环!手动一步一步根本不实用!

Q1.) 有没有办法在 R studio 中为这个函数设置断点?

Q2.) 如果不是,我找到这个问题的最佳选择是什么?(理想情况下,我不想弄乱包源代码,但如果它是唯一的选择,我会这样做)

谢谢

巴兹

r rstudio

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

为什么出现在我的数据中?

我从这里下载文件“ pi_million_digits.txt”:

https://github.com/ehmatthes/pcc/blob/master/chapter_10/pi_million_digits.txt

然后,我使用以下代码打开并阅读它:

filename = 'pi_million_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

print(pi_string[:52] + "...")
print(len(pi_string))
Run Code Online (Sandbox Code Playgroud)

但是,产生的输出是正确的,除了它之前带有相同的奇怪符号:“3.141 ....”

是什么导致这些奇怪的符号?我正在剥线,所以我希望这些符号会被删除。

python byte-order-mark utf-8 character-encoding python-3.x

4
推荐指数
1
解决办法
2324
查看次数

从 Pandas Dataframe 中提取月份数据

我最初有字符串格式的日期。我想从这些日期中提取月份作为数字。

df = pd.DataFrame({'Date':['2011/11/2', '2011/12/20', '2011/8/16']})
Run Code Online (Sandbox Code Playgroud)

我将它们转换为熊猫日期时间对象。

df['Date'] = pd.to_datetime(df['Date'])
Run Code Online (Sandbox Code Playgroud)

然后我想提取所有月份。

当我尝试:

df.loc[0]["Date"].month
Run Code Online (Sandbox Code Playgroud)

这可以返回正确的 11 值。

但是当我尝试调用多个月时它不起作用?

df.loc[1:2]["Date"].month

AttributeError: 'Series' object has no attribute 'month'
Run Code Online (Sandbox Code Playgroud)

python datetime timestamp python-3.x pandas

4
推荐指数
1
解决办法
2322
查看次数

TensorBoard启动但未在浏览器中显示

运行下面的单元格19和23中的代码以导入和预处理数据.

https://github.com/ageron/handson-ml/blob/master/09_up_and_running_with_tensorflow.ipynb

然后运行第59-64行以解决线性最小二乘问题,同时保存用于张量板的训练数据.

然后我使用Anaconda提示符进入保存日志文件的目录:

然后我使用Anaconda提示运行:tensorboard --logdir =\tf_logs

它在http:// NW1:6006给出了消息Starting TensorBoard b'54'

但是当我尝试将该地址粘贴到浏览器中时它不起作用?

我尝试过各种绝对路径名称等组合,但似乎没什么用.我也尝试将主机指定为127.0.0.1

tensorboard --logdir =\tf_logs --host = 127.0.0.1

但似乎没有任何作用!网页完全空白.

我正在运行Windows 8.1
Internet Explorer 11
Anaconda 3
Python3.5
Tensorflow 1.1

今天一切都安装得很新,所以应该是最新的

tensorflow tensorboard

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