我在Unix上的Matlab上远程运行一些代码,生成许多图.我不希望在我的本地系统上弹出数百个数字.(我怀疑窗口化过程也会减慢代码的执行速度.)我读到将DISPLAY环境变量设置为null会限制此行为,事实上,
$export DISPLAY=
$matlab14a -nodisplay -nosplash
>>X=1:10;
>>Y=X.^2;
>>plot(X,Y);
Run Code Online (Sandbox Code Playgroud)
立即将光标返回到控制台,不显示绘图.但是,我希望能够重新切换显示.我可以跑
>>setenv('DISPLAY',':1102') %Previous (correct) value of $DISPLAY
>>getenv('DISPLAY')
ans =
:1102
>>plot(X,Y);
Run Code Online (Sandbox Code Playgroud)
但是,情节仍然没有出现.我相信这是因为我的系统通过qrsh调度程序然后另一个子shell路由matlab实例.因此,当我更改我的DISPLAY变量时,我相信无论哪个shell都没有访问此变量.我不知道这个过程的具体细节.
我的问题是,一旦我将DISPLAY变量更改为正确的值,我怎样才能让Matlab正确显示图?或者,是否还有其他解决方案可以切换所有绘图/图形的显示?
我有一些代码使用@parallel for循环进行计算,在每次迭代时产生一个输出元组.我想在数组中收集这些元组以进行进一步处理:
n=2
out = @sync @parallel (hcat) for i=1:n
(i, i+1)
end
for i=1:n
(j,k) = out[i]
# do something
end
println("okay")
Run Code Online (Sandbox Code Playgroud)
如果这里只是循环的一次迭代,out则是一个元组,而不是一个元组数组,并(j,k) = out[i]抛出一个错误.
n=1
out = @sync @parallel (hcat) for i=1:n
(i, i+1)
end
for i=1:n
(j,k) = out[i] # error
# do something
end
println("not reached")
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以强制out成为一个元组数组而不管它的值如何n,而不必out在循环后进行任何检查?
谢谢.
我在组合表达式和字符串插值时遇到了麻烦.我想做这样的事情:
a = [:foo, :bar]
b = [:printfoo, :printbar]
for (str, fn) in zip(a,b)
@eval begin
"""
```
$fn()
```
Prints $str.
"""
$fn() = println("$str")
end
end
Run Code Online (Sandbox Code Playgroud)
我想要的输出是两个函数,一个可能看起来像打字一样
"""
```
printfoo()
```
Prints foo.
"""
printfoo() = println("foo")
Run Code Online (Sandbox Code Playgroud)
相反,我得到的表达式看起来像这样(当我使用quote时而不是@eval begin):
```\n$(fn)()\n```\nPrints $(str).\n" # /home/..., line 12:
printfoo() = begin # /home/..., line 12:
println("$(str)")
end
Run Code Online (Sandbox Code Playgroud)
我不明白为什么使用相同的$x语法,插入被执行,因为我只想在quoted("...")区域之外.我尝试了一些$($x)等等的组合但是我错过了一些细微之处:
"$str" - > "$(str)""$($str)" - > "$(foo)"会映射到"foo"什么?
谢谢.
我在Matlab R2012b中遇到了一个令人费解的错误.似乎也是数据类型的变量名称表现出奇怪的行为.请看这个小例子:
function [] = test1()
dataset = 1;
if dataset ~= 0
disp hello
end
end
Run Code Online (Sandbox Code Playgroud)
正如预期的那样test1()产生输出的调用hello.现在,dataset我不是在我的函数中设置值,而是运行一个脚本.
function [] = test2()
myscript;
if dataset ~= 0
disp hello
end
end
Run Code Online (Sandbox Code Playgroud)
哪myscript.m一条有一条线:
dataset=1;
Run Code Online (Sandbox Code Playgroud)
现在,当我打电话时,test2()我收到此错误:
Undefined function 'ne' for input arguments of type 'dataset'.
Error in test2 (line 4)
if dataset ~= 0
Run Code Online (Sandbox Code Playgroud)
(原谅名为变量的变量dataset- 我知道它也是数据类型的名称,它出现在我正在运行的代码中.)所以好像在test2,Matlab创建一个空dataset对象而不是使用名为的变量dataset.此外,仅当我在脚本中而不是在函数体中设置值时,才会出现此行为.更奇怪的是,我能做到:
>> dbstop in test2 at 4 % line …Run Code Online (Sandbox Code Playgroud)