python-在Matlab中优化“遮罩”功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-在Matlab中优化“遮罩”功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1675字,纯文字阅读大概需要3分钟。
内容图文
为了进行基准比较,我考虑简单的功能:
function dealiasing2d(where_dealiased, data)
[n1, n0, nk] = size(data);
for i0=1:n0
for i1=1:n1
if where_dealiased(i1, i0)
data(i1, i0, :) = 0.;
end
end
end
它在伪光谱模拟(数据是一个3d复数数组)中很有用,但基本上它将掩码应用于一组图像,将其中where_dealiased为true的元素置零.
我将在这种简单情况下比较不同语言(以及实现,编译器等)的性能.对于Matlab,我将函数的计时时间定为timeit.由于我不想在Matlab中对我的无知进行基准测试,因此我想用这种语言真正优化此函数.在Matlab中最快的方法是什么?
我现在使用的简单解决方案是:
function dealiasing2d(where_dealiased, data)
[n1, n0, nk] = size(data);
N = n0*n1;
ind_zeros = find(reshape(where_dealiased, 1, []));
for ik=1:nk
data(ind_zeros + N*(ik-1)) = 0;
end
我怀疑这不是正确的方法,因为等效的Numpy解决方案的速度大约快10倍.
import numpy as np
def dealiasing(where, data):
nk = data.shape[0]
N = reduce(lambda x, y: x*y, data.shape[1:])
inds, = np.nonzero(where.flat)
for ik in xrange(nk):
data.flat[inds + N*ik] = 0.
最后,如果有人告诉我“当您想在Matlab中使用某个特定功能非常快时,应该像这样编译它:[…]”,那么我将在基准测试中包含这样的解决方案.
编辑:
经过2个回答,我已经对这些命题进行了基准测试,并且似乎并没有明显的性能改进.这很奇怪,因为简单的Python-Numpy解决方案的速度实际上快了一个数量级,因此我仍在寻找Matlab更好的解决方案…
解决方法:
如果我理解正确,可以使用bsxfun轻松快速地完成此操作:
data = bsxfun(@times, data, ~where_dealiased);
这会将where_dealiased为true(将它们乘以0)的条目的所有第三维分量设置为0,而其余部分保持不变(将它们乘以1).
当然,这假设[size(data,1)size(data,2] == size(where_dealiased).
您使用linear indexing的解决方案也可能非常快.为了节省时间,您可以删除整形,因为find已经返回线性索引:
ind_zeros = find(where_dealiased);
内容总结
以上是互联网集市为您收集整理的python-在Matlab中优化“遮罩”功能全部内容,希望文章能够帮你解决python-在Matlab中优化“遮罩”功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。