朱莉娅(Julia):跨观测张量广播成对距离计算

康纳

我正在尝试使用DistancesJulia中包来执行距离矩阵的广播计算。

我了解如何N x N为某些矩阵X(带有维D x N计算单个距离矩阵,其中每列X[:,i]存储一个D维特征向量以进行观察i该代码将是:

using Distances

dist_matrix = pairwise(Euclidean(), X, dims = 2)

dist_matrix包含每对D维列dist_matrix[m,n]之间的欧几里得距离,例如存储X[:,m]之间的欧几里得距离X[:,n]

现在想象一下,我的数组X实际上是-维观测值的整个张量或'体积' D,因此X[:,i,j]存储了j我的D x N观测值-th'切片' 因此,整个数组的X尺寸为D x N x T,其中T为切片数。

因此,我想计算距离矩阵张量或“体积”,以便dist_matrix具有尺寸N x N x T

有没有一种方法可以通过pairwise()在Julia中广播函数来单行执行此操作最快的方法是什么?下面显示了带有基本for循环的想法:

using Distances

dist_matrix_tensor = zeros(N,N,T);

for t = 1:T
        dist_matrix_tensor[:,:,t] = pairwise(Euclidean(), X[:,:,t], dims = 2)
end

编辑:我想出了如何使用进行此操作mapslices,但仍不确定这是否是最佳方法。

using Distances

dist_function(x)  = pairwise(Euclidean(), x, dims = 2) # define a function that gets the N x N distance matrix for a single 'slice'

dist_matrix_tensor = mapslices(dist_function, X, dims = [1,2]) # map your matrix-operating function across the slices of the main tensor X

当然,这也可以并行化,因为X的每个“切片”在此计算中都是独立的,因此我基本上只是在寻找实现此目的的最快方法。我总体上也对您如何通过广播具体做到这一点感兴趣。

弗雷德里克·巴格(Fredrik Bagge)

mapslices如果的维度X较大您的解决方案的性能会比较合理以下是JuliennedArrays的示例,它对于small而言X速度稍快一些,但mapslices与两个第一个维度的大小为100时具有相同的性能

using Distances, JuliennedArrays, BenchmarkTools

dist_function(x)  = pairwise(Euclidean(), x, dims = 2) # define a function that gets the N x N distance matrix for a single 'slice'

X = randn(10,10,20);
dist_matrix_tensor = @btime mapslices(dist_function, X, dims = [1,2]); # 61.172 μs (198 allocations: 42.28 KiB)
dist_matrix_tensor2 = @btime map(dist_function, Slices(X, 1, 2)); # 41.529 μs (62 allocations: 21.67 KiB)

但是请注意,JuliennedArrays返回一个VectorofMatrix数组而不是一个三维数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

朱莉娅:成对距离的嵌套循环真的很慢

来自分类Dev

广播分配慢朱莉娅

来自分类Dev

牛Julia在朱莉娅在薄荷

来自分类Dev

朱莉娅:更快的矩阵计算

来自分类Dev

朱莉娅(Julia):如何有效计算Vector {Union {T,Missing}}中的遗失数量

来自分类Dev

朱莉娅:在矩阵的各行之间广播`findfirst()`

来自分类Dev

朱莉娅中的快速张量初始化

来自分类Dev

NetCDF在朱莉娅

来自分类Dev

在朱莉娅重塑

来自分类Dev

朱莉娅的弦

来自分类Dev

朱莉娅-替换

来自分类Dev

NetCDF在朱莉娅

来自分类Dev

朱莉娅·杜夫(Julia Double)循环,遍历字典

来自分类Dev

朱莉娅(Jupyter)的茱莉亚(Julia Kernel)撞车

来自分类Dev

朱莉娅(Julia)DataFrames格式为pdf(带nbconvert)

来自分类Dev

朱莉娅(Julia)数据框,其中列是数组的数组?

来自分类Dev

朱莉娅(Julia)组按名称和总数

来自分类Dev

朱莉娅(Julia)语言:有t检验吗?

来自分类Dev

朱莉娅(Julia)中的“&=”语法是什么意思?

来自分类Dev

朱莉娅·弗莱克斯(Julia Flux):确定图层类型

来自分类Dev

朱莉娅(Julia)中的标题与PGFPlots左对齐

来自分类Dev

总计为数字的组合-朱莉娅·朗(Julia Lang)

来自分类Dev

组合加总为目标-朱莉娅·朗(Julia Lang)

来自分类Dev

函数链中的条件朱莉娅(Julia-lang)

来自分类Dev

朱莉娅·塞特(Julia Set)渲染代码

来自分类Dev

朱莉娅(Julia)我决定在朱莉娅(Julia)中测试一些数学,但出现错误

来自分类Dev

朱莉娅-@spawn计算作业顺序而不是并行

来自分类Dev

朱莉娅语言:findInterval

来自分类Dev

朱莉娅的条件理解