小编sun*_*ica的帖子

如何在MATLAB中将移动窗口应用于2D矩阵?

我正在使用Matlab中的图像进行特征提取.为此必须在nXn窗口上应用许多函数(例如在每个3X3窗口上找到方差等等.
除了在矩阵上循环并收集窗口之外,在Matlab中有一种简单有效的方法吗?每次元素?
对于某些函数,我已经能够找到一个等效的掩码并使用filter2应用它们,但对于其他许多我似乎没有这么奢侈(一个很好的例子:3X3窗口的中位数).
我想要的是 arrayfun,但适用于nXn窗口,而不是单个元素.
谢谢,
Sundar

matlab function image-processing

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

Matlab:从循环中重复调用相同的mex函数会产生太多的开销吗?

我有一些需要加速的Matlab代码.通过分析,我已经确定了一个特定的函数作为减慢执行速度的罪魁祸首.这个函数在循环中被调用了数十万次.

我的第一个想法是将函数转换为mex(使用Matlab Coder)来加速它.然而,常见的编程意义告诉我Matlab和mex代码之间的接口会导致一些开销,这意味着调用这个mex函数数千次可能不是一个好主意.它是否正确?或者Matlab在重复调用相同的mex以消除开销时会做些什么?

如果显著的开销,我想重新编写代码,以增加循环函数本身和创造的一个MEX.在此之前,我想验证我的假设,以证明花在此上的时间.

更新:

我尝试了@ angainor的建议,并使用以下代码创建了donothing.m:

function nothing = donothing(dummy) %#codegen
nothing = dummy;
end
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个mex函数作为donothing_mex,并尝试了以下代码:

tic;
for i=1:1000000
    donothing_mex(5);
end
toc;
Run Code Online (Sandbox Code Playgroud)

结果是,对该功能的一百万次调用大约需要9秒.这对我们来说并不是一个重要的开销,所以现在我想我会将被调用的函数单独转换为mex.但是,从一个执行大约一百万次的循环调用一个函数回想起来似乎是一个非常愚蠢的想法,考虑到这是性能关键代码,所以将循环移动到mex函数仍然在书中,但优先级要低得多.

performance matlab mex

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

在崩溃之前捕获Vim的错误输出

这与调试中提到的问题有关:插件(vim-latex)在启动时崩溃gVim

安装latex-suite后,每次打开.tex文件时,无论是来自gVim还是终端vim,是否包含\ begin语句,Vim都会立即崩溃.

在重复崩溃之后,我能够在状态行中读取Python Traceback字符串,其中提到了第530行C:\Python27\lib\site.py(仅包含known_paths = addusersitepackages(known_paths)),但其余的回溯是不可见的,因为状态行显示会截断它并且仅显示为无论如何,在自动崩溃之前.

有没有办法以更永久和完整的方式捕获这个Traceback输出,以及从这个插件到Python等的方式?

(我尝试了这个-V15filename.log选项,但是它(像往常一样)没用,包含一些部分记录到vim启动过程中的一个古老点.)

编辑:道歉,因为以前没有提到操作系统(除了间接通过C:\路径),这个问题是在Windows上.从另一个相关的问题来看,似乎几乎所有在Windows上尝试乳胶套件的人都遇到了这个问题.

更新:只是一个FTR - 设置verbosefile没有帮助(可能是因为写入是根据文档缓冲的),并且:redir也没有捕获这个,以此错误和崩溃之前发生的任何操作结束.

vim latex-suite

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

C和Matlab:为什么Matlab中的这一行在Matlab Coder生成的C++代码中变得如此之多?

我有一些运行数百万次的Matlab代码,如本问题所述:Matlab:从循环中重复调用相同的mex函数会产生太多的开销吗?

我正在尝试mex-ify,看看是否有帮助.现在,当我使用Matlab Coder工具从Matlab代码生成代码时,代码通常是合理的,但是这一行Matlab代码(在下面第一行的C++注释中)会产生这种怪异,我不知道为什么.任何帮助理解和降低其复杂性将不胜感激.

对于上下文,d是二维矩阵,s1是行向量.在前面的C++代码中,s1_idx被指定为长度(s1)+ 1,

/* d(:, 1) = 0:length(s1); */
cdiff = s1_idx_0 - 1;
for (nm1d2 = 0; nm1d2 <= cdiff; nm1d2++) {
   tmp_data[nm1d2] = nm1d2;
}
ndbl = (int32_T)muDoubleScalarFloor((real_T)s1_sizes[1] + 0.5);
apnd = ndbl;
cdiff = ndbl - s1_sizes[1];
if (muDoubleScalarAbs((real_T)cdiff) < 4.4408920985006262E-16 * (real_T)s1_sizes[1]) {
   ndbl++;
   apnd = s1_sizes[1];
} else if (cdiff > 0) {
   apnd = ndbl - 1;
} else {
   ndbl++;
}
if (ndbl > 0) {
   b_tmp_data[0] = 0.0;
   if …
Run Code Online (Sandbox Code Playgroud)

c c++ matlab code-generation

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

将密钥对导入Amazon AWS - 错误的指纹?

我正在尝试从我的计算机导入现有的密钥对以在EC2中使用.但是,一旦我点击"是,导入",亚马逊显示的指纹ssh -lf与同一个键显示的指纹不匹配.我已经验证它们是相同的密钥,尝试重新导入密钥等.通常的做法似乎是使用"创建密钥对"部分,但我更喜欢使用我通常的SSH密钥对.我也无法使用SSH登录到设置为使用此密钥对的实例(我得到Permission denied (publickey).).

有没有人遇到过AWS这样的问题?对问题可能是什么的任何见解?

ssh amazon-ec2 amazon-web-services

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

从 PyJulia 调用 Julia 模块函数时出现 ImportError

我试图在一些 Python 代码中包含 Julia 函数 (PowerModelsDistribution.solve_mc_opf)。该包可以在 Julia 中运行,但我一直坚持将其包含在 PyJulia 中。我尝试过一些事情:

1.

from julia import Pkg
Pkg.activate("C:/Users/Aisling/.julia/environments/pmd") # pmd is my Julia env but I've also tried this in my base
from julia.PowerModelsDistribution import solve_mc_opf
Run Code Online (Sandbox Code Playgroud)

结果是

ImportError                               Traceback (most recent call last)
<ipython-input-33-6e83bbbb609c> in <module>
----> 1 from julia.PowerModelsDistribution import solve_mc_opf

C:\ProgramData\Anaconda3\lib\site-packages\julia\core.py in load_module(self, fullname)
    258                                               JuliaModule(self, fullname))
    259 
--> 260         raise ImportError("{} not found".format(juliapath))
    261 
    262 

ImportError: PowerModelsDistribution.solve_mc_opf not found
Run Code Online (Sandbox Code Playgroud)
  1. 然后我尝试:
import julia
jl = julia.Julia()
res = jl.run(PowerModelsDistribution.solve_mc_opf("documents/powermodelsdistribution/test/data/opendss/case3_unbalanced.dss", ACPUPowerModel, …
Run Code Online (Sandbox Code Playgroud)

python cross-language julia julia-pkg

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

核心转储本身是可执行的吗?

Core转储上的维基百科页面说

在类Unix系统中,核心转储通常使用标准的可执行映像格式:

a.out in older versions of Unix,
ELF in modern Linux, System V, Solaris, and BSD systems,
Mach-O in OS X, etc.
Run Code Online (Sandbox Code Playgroud)

这是否意味着核心转储本身是可执行的?如果没有,为什么不呢?

编辑:由于@ WumpusQ.Wumbley coredump_filter在评论中提到了一个问题,或许上面的问题应该是:是否可以生成核心转储,使其可以自行执行?

unix linux executable coredump executable-format

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

如何在Python中搜索正则表达式匹配?

我需要尝试一个字符串对多个(独占 - 意味着匹配其中一个的字符串不能匹配任何其他)正则表达式,并根据它匹配的代码执行不同的代码.我现在拥有的是:

m = firstre.match(str)
if m:
    # Do something

m = secondre.match(str)
if m:
    # Do something else

m = thirdre.match(str)
if m:
    # Do something different from both
Run Code Online (Sandbox Code Playgroud)

除了丑陋之外,这个代码与所有正则表达式相匹配,即使它匹配其中一个(比如firstre),这是低效的.我试着用:

elif m = secondre.match(str)
Run Code Online (Sandbox Code Playgroud)

但是我知道if语句中不允许赋值.

有没有一种优雅的方式来实现我想要的?

python regex switch-statement

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

在Perl 5中可以使用'when'语句的条件是什么?

关于块when之外的语句,文档似乎很少given.据说when可以在设置'主题'时使用,但是当确定某个主题被设置时?考虑这些情况:

for (@arr) {
  when { }
}
Run Code Online (Sandbox Code Playgroud)

似乎这是默认的基本情况,但我甚至无法在perl 5.14.2上工作 - $ perl -Mfeature=switch -e 'foreach (qw(a b c)) { when (/a/) {print 'boom'} }'没有任何打印.我究竟做错了什么?原来这只是另一个bash引用问题.

for my $elem (@arr) {
  when { }
}
Run Code Online (Sandbox Code Playgroud)

这会有用吗?$ elem会自动成为使用的主题when吗?

for (@arr) {
  $_ = some_expression($_);
  when { }
}
Run Code Online (Sandbox Code Playgroud)

这会有用吗?可以在循环中设置主题吗?

此外,上述每个代码段使用foreach而不是for?时有什么区别吗?

基本上,我对主题的主题非常不清楚,所以请赐教.

perl foreach for-loop

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

查找两个数组之间的(multiset)差异

给定数组(比如行向量)A和B,如何找到一个数组C,使得合并B和C将得到A?

例如,给定

A = [2, 4, 6, 4, 3, 3, 1, 5, 5, 5];
B = [2, 3, 5, 5];
Run Code Online (Sandbox Code Playgroud)

然后

C = multiset_diff(A, B) % Should be [4, 6, 4, 3, 1, 5]
Run Code Online (Sandbox Code Playgroud)

(结果的顺序在这里无关紧要).

对于相同的A,如果B = [2, 4, 5],那么结果应该是[6, 4, 3, 3, 1, 5, 5].

(由于4A中有两个s,4B 中有一个,因此结果C中应该有2 - 1 = 1.4其他值类似.)

PS:请注意,这setdiff将删除2,3和5的所有实例,而在这里它们需要被删除,但是它们出现在B中很多次.


性能:我在本地运行了一些快速的基准测试,以下是未来参考的结果:

  • @ heigele的嵌套循环方法对于小长度的A(最多N = 50左右的元素)表现最佳.与下一个最佳方法相比,它对于小(N = 20)As来说好3倍,对于中等大小(N = 50)As 好1.5倍- …

arrays matlab multiset

5
推荐指数
2
解决办法
209
查看次数