- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有两个已排序的 float 向量 - 我们称它们为 A 和 B。是否有一种聪明的方法来选择 A 的元素和 B 的元素,使得这些元素在所有对中的值最接近?现在我正在用两个循环强制执行它,但似乎应该有更好的方法。
最佳答案
这是演示:
julia> X=sort(rand(6)) # data example X
6-element Vector{Float64}:
0.03229732486724901
0.14661947289585864
0.28060083090585386
0.35640311556807047
0.8995421870143288
0.9063824527540892
julia> Y=sort(rand(5)) # data example Y (note: X and Y sizes can be different)
5-element Vector{Float64}:
0.40423308422286974
0.7126138483715454
0.8721509236032997
0.9193793976271042
0.9827581490910492
julia> minimum( (abs(xi-yi) for xi in X, yi in Y) ) # a short, but O(N^2) approach
0.012996944873014948
julia> (d,i,j)=find_min_dist(X,Y) # <- the proposed solution (see code below)
(0.012996944873014948, 6, 4)
julia> abs(X[i]-Y[j]) # <- check that the 2 methods give the same result
0.012996944873014948
这是完整的代码:这不是那么短,抱歉。然而观察只有一次pass,复杂度为O(N)
function find_min_dist(X::AbstractVector{T}, Y::AbstractVector{T}) where {T<:AbstractFloat}
@assert !isempty(X) && !isempty(Y)
if Y[1]<X[1]
(d,j,i) = find_min_dist(Y,X)
return (d,i,j)
end
@assert issorted(X) && issorted(Y)
X_n = length(X)
Y_n = length(Y)
min_dist = typemax(T)
min_dist_X_i = 0
min_dist_Y_j = 0
i = 1
j = 1
@inbounds while i ≤ X_n
# Find first j, such that Y[j] ≥ X[i]
# and check dist(X[i],Y[j-1]) && dist(X[i],Y[j])
#
if (j ≤ Y_n) && (Y[j]<X[i])
j+=1
else
if j > 1,
min_dist_candidate = abs(X[i]-Y[j-1])
if min_dist > min_dist_candidate
min_dist = min_dist_candidate
min_dist_X_i = i
min_dist_Y_j = j-1
end
end
if j ≤ Y_n
min_dist_candidate = abs(X[i]-Y[j])
if min_dist > min_dist_candidate
min_dist = min_dist_candidate
min_dist_X_i = i
min_dist_Y_j = j
end
end
i+=1
end
end
(min_dist,min_dist_X_i,min_dist_Y_j)
end
这里有一些解释:
想法是在 X
和 Y
上循环一次并找到第一个 j
使得 Y[j] ≥ X [我]
。为了不错过第一个 Y[1]
,我们在必要时置换 X
和 Y
。一旦 Y[j] ≥ X[i]
,我们检查 dist(X[i],Y[j-1])
和 dist(X [i],Y[j])
。如果找到更好的 min_dist
,我们会用定义最佳对的 i,j
索引记录它。
更新:length(X)=100
和 length(Y)=200
所有对比较:
julia> @benchmark minimum( (abs(xi-yi) for xi in $X, yi in $Y) )
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max): 36.840 μs … 197.413 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 37.811 μs ┊ GC (median): 0.00%
Time (mean ± σ): 41.021 μs ± 9.457 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
▇█ ▆ ▄ ▃ ▁▁▁ ▁▁▁▁ ▂
██▄█▅▅██▃█▃▃▁▁▄▃▄▄█████████████████▇▇▆▇▇▆▅▇▆▅▆▅▆▅▅▅▅▆▅▅▅▆▆▆▅ █
36.8 μs Histogram: log(frequency) by time 81.7 μs <
Memory estimate: 0 bytes, allocs estimate: 0.
使用 find_min_dist
:
julia> @benchmark find_min_dist($X,$Y)
BenchmarkTools.Trial: 10000 samples with 181 evaluations.
Range (min … max): 583.718 ns … 2.140 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 598.771 ns ┊ GC (median): 0.00%
Time (mean ± σ): 655.339 ns ± 134.850 ns ┊ GC (mean ± σ): 0.00% ± 0.00%
█▇▄ ▂▁▁▂▂▂▃▃▃▁▁ ▁▁ ▁ ▁
███▇█████████████▇██████▆▆▇▇▇▇▇▇▇▇▇▇▆▇▆▆▆▇▆▆▆▆▅▆▅▆▅▅▆▅▅▄▅▄▃▄▄ █
584 ns Histogram: log(frequency) by time 1.26 μs <
Memory estimate: 0 bytes, allocs estimate: 0.
建议的解决方案快 60 倍,您可以通过删除 @assert issorted
获得更多 yield 。
关于algorithm - 在两个向量中寻找最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73029050/
我想创建一个返回值的方法(我们称之为“z”)。它的值由另一个值决定(我们称之为“y”)。基本上我想要的是满足以下条件: 当 x 接近 0 时,z 接近 100。 当 x 接近无穷大时,z 接近 0。
我正在尝试使用 Java 中的PreparedStatement 执行查询。 当我尝试执行查询时,收到错误号 1064(语法错误)。 我已经在 MySQL 查询浏览器中使用替换值对此进行了测试,效果很
我正在开发一个应用程序来解析 Scala 中的命令。命令的一个例子是: todo get milk for friday 所以计划是让一个非常智能的解析器将行分开并识别命令部分以及字符串中有时间引用的
来自 http://directwebremoting.org/dwr/reverse-ajax/index.html ,它表示它支持轮询、 cometd 、搭载。这是否意味着当我们实现这种方法时,我
我开始研究一个概念,该概念要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为 Android 开发,所以这对速度非常关键(它也将针对可能的数百个对象计算每一帧。) 我能想到的解决方案如下:
我正在处理一个处理“门票”的表(状态=“开放”或状态=“关闭”)。当票证关闭时,相关系统不会更改状态,而是会创建一个具有“已关闭”状态的重复条目。 对于“ticket_number”关键字段,如果存在
我正在尝试在 python 中执行一些 n-gram 计数,我想我可以使用 MySQL(MySQLdb 模块)来组织我的文本数据。 我有一个很大的表,大约有 1000 万条记录,代表由唯一数字 ID(
我正在尝试将数据添加到 mariadb 表中。我想将 val0 到 val5 作为查询的值传递。但我收到错误 OperationalError: close "%": 语法错误代码 list_Valu
我正在使用 (Py)OpenGL 显示 256 色索引图像。我将着色器与包含调色板的一维纹理一起使用。这是片段着色器代码: #version 330 uniform sampler2D texture
对于我的元素 areallybigpage.com (*),我想看看我们能用 CSS 的 transform: scale(...) 走多远。 这有效并以正常大小显示文本: #id1 { positi
我有两列带有数字数据的 Pandas 表(dtype flaot64)。 我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05
我正在构建一个由用户登录和注册组成的应用程序,但每次我在模拟器上测试它时,我都会收到强制关闭。以下是我在日志猫中收到的错误: 08-14 14:06:28.853: D/dalvikvm(828):
我正在尝试在 Python 中实现 Strassen 矩阵乘法。我已经让它发挥了一些作用。这是我的代码: a = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] b
为什么这不起作用?这与 = 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。编辑: Activated In 是一列。 示例来自 How to select data from d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我有一个测试区,它是来自数据库的动态文本,可能有数千个单词。我希望它中断并在每段中用句号将近 100 个(任意长度)单词作为一个段落。我能够在 100 个单词后中断,但不能完全停止。为了在 100 个
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
这是来自一个统计项目。我定义了下面的函数,但是当n接近400时,第二个方法很慢。第一个方法很好(这里有人帮助了我in this question) import Math.Combinatorics.
我正在尝试创建一个 css 侧边菜单,但是当我关闭菜单并将 div 容器宽度设置为 0 时,链接仍然可见。 这是 jsfiddle - https://jsfiddle.net/atLvp6k7/ 有
我对 MySQL 还很陌生。我必须使用输出参数调用存储过程。我在互联网上搜索了很多,但没有找到解决我的问题的正确方法。如果我使用 @outputParamName 调用存储过程,它会说我在 NULL
我是一名优秀的程序员,十分优秀!