小编Mic*_*ith的帖子

从Matlab中更改DISPLAY变量

我在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正确显示图?或者,是否还有其他解决方案可以切换所有绘图/图形的显示?

unix matlab

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

从for循环中收集元组数组

我有一些代码使用@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在循环后进行任何检查?

谢谢.

julia

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

结合字符串和表达式插值

我在组合表达式和字符串插值时遇到了麻烦.我想做这样的事情:

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"什么?

谢谢.

julia

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

脚本在函数中运行出现令人费解的错误

我在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)

matlab

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

标签 统计

julia ×2

matlab ×2

unix ×1