gpt4 book ai didi

julia - 在 Julia 数组中获得独特的、非冗余的组合?

转载 作者:行者123 更新时间:2023-12-05 04:28:00 26 4
gpt4 key购买 nike

我正在比较两个变量数组,

arr1 = [1,2,3]
arr2 = [1,2,3]

我想得到每个唯一的、非冗余变量组合。最初的唯一组合是:

(1,1), (1,2), (1,3)
(2,1), (2,2), (2,3)
(3,1), (3,2), (3,3)

但是这个集合进一步减少了,因为比较变量 1 和它自己(和 2 和它自己,等等)是没有意义的。删除这些,集合减少到:

(1,2), (1,3)
(2,1), (2,3)
(3,1), (3,2)

此外,还有冗余对,因为将变量 1 与变量 2 进行比较与将变量 2 与变量 1 进行比较是相同的。所以我要寻找的最终结果是:

(1,2), (1,3), (2,3)

我可以通过第一位进行推理:

# Generate combination arrays
sets = []
sy = 3
for i in 1:size(ellipseX)[2]
set1 = repeat([i],sy)
set2 = range(1,sy)
newsets = cat(set1,set2,dims=2)
sets = cat(sets,newsets,dims=1)
end
# Remove rows with same column values
for N in 0:sy-1
rownum = 1+sy*N
sets = sets[setdiff(1:end, rownum), :]
end

但是删除冗余对有点棘手。有没有更简单的方法来做到这一点?

最佳答案

这似乎是 Combinatorics.jl 的工作.

using Combinatorics

arr1 = [1,2,3]
arr2 = [1,2,3]

arr = unique([arr1; arr2])
combs = combinations(arr,2) |> collect
[1, 2]
[1, 3]
[2, 3]

如果由于某种原因您无法安装 Combinatorics.jl,理解也可以。

n = length(arr)
combs = [(arr[i],arr[j]) for i = 1:n-1 for j = i+1:n]
(1, 2)
(1, 3)
(2, 3)

更新:如果数组可能有不同的数字,则需要另一个就地过滤操作以确保输出元组有一个元素取自 arr1 和另一个取自 arr2 的元素。

filter!(t->any(t .∈ (arr1,)) && any(t .∈ (arr2,)), combs)

例子:

arr1 = [1,2,3,4]
arr2 = [1,2,5]

U = unique([arr1; arr2])

n = length(U)
combs = [(U[i],U[j]) for i=1:n-1 for j=i+1:n]
filter!(t->any(t .∈ (arr1,)) && any(t .∈ (arr2,)), combs)
9-element Vector{Tuple{Int64, Int64}}:
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(2, 3)
(2, 4)
(2, 5)
(3, 5)
(4, 5)

关于julia - 在 Julia 数组中获得独特的、非冗余的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72706468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com