作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 Octave 代码:
dist=0;
for i = 1:length(x);
for j = 1:length(y);
v = x(i,:) - y(j,:);
distvect(j) = norm(v);
endfor
dist = dist + min(distvect);
endfor
最佳答案
在这种情况下,您可以进行的最佳优化是实现 norm
自己利用矩阵乘法,而不是循环遍历各个元素。
回想一下,对于向量值,norm(v)
计算 norm(v, 2)
,这是欧几里得距离
norm(v, 2) = (sum (abs (v) .^ 2)) ^ (1/2)
a = x(i, :)
,
b = y(j, :)
,
M = length(x)
和
N = length(y)
.由于您的变量
v
包含差异向量,我们可以扩展
distvect
的计算进入
distvect = norm(v)
= norm(x(i, :) - y(j, :))
= norm(a - b)
= (sum (abs( a - b ) .^ 2)) ^ (1/2)
distvect^2 = sum (abs ( a - b ) .^ 2)
(a - b)^2 = a^2 - 2ab + b^2
,这使得
abs
功能冗余
distvect^2 = sum (sum(a.*a) * ones(1,N) - 2*a*b' + ones(M,1) * sum(b'.*b') )
x
的外部产品来完成的。和
y
创建
length(x)
的矩阵通过
length(y)
矩阵。然后只需沿每列取最小距离并将结果的平方根相加
xx = sum(x .* x, 2) * ones(1, length(y))
xy = x * y'
yy = ones(length(x), 1) * sum(y' .* y')
dist = sum(sqrt(min(xx - 2.*xy + yy)))
关于performance - 如何在 Octave 音阶中优化以下双循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656754/
我最近使用Homebrew在Mac上输入了GNU Octave, 将octave放入bash中,它打开了octave-gui窗口。 Octave GUI看起来很吸引人(至少在Mac上是这样),所以我想
我正在尝试使用 Octave 音程中的 invfreqs 从频率响应数据中找到传递函数。原则上它是有效的,问题是生成的传递函数总是拟合最高频率,低频匹配得很差。 尝试权衡拟合误差与频率的关系是行不通的
如何在音频缓冲区级别上向上或向下移动 Octave?或者有这个库函数吗?是否有用于确定音频文件某些属性的库或可能允许的(iOS)第 3 方库?例如 BPM、Key 等。或者如何确定这些东西?如何区分音
在 GNU Octave 版本 3.4.3 中,我无法应用自定义函数来操作矩阵中的每个项目/元素。 我有一个 (2,3) 矩阵,如下所示: mymatrix = [1,2,3;4,5,6]; myma
我是一名优秀的程序员,十分优秀!