我们在哪个数组中可以找到Julia中的元素?

问题描述 投票:0回答:2

想象一下,我们有以下3个数组的数组,涵盖范围1到150:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ... 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]

[51, 52, 53, 54, 55, 56, 57, 58, 59, 60 ... 92, 93, 94, 95, 96, 97, 98, 99, 100, 107]

[71, 73, 84, 101, 102, 103, 104, 105, 106, 108 ... 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]

我想构建一个数组,存储在哪个数组中我们找到值1到150.结果必须是:

[1 1 1 ... 1 2 2 2 ... 2 3 2 3 2 ... 3 3 3 ... 3]

其中每个元素对应于1,2,3,...,150。获得的数组然后给出元素1到150的数组成员资格。代码必须应用于任意数量的数组(因此不仅仅是3个数组)。

arrays julia membership
2个回答
2
投票

你可以使用array comprehension。这是一个包含范围1:10的三个向量的示例:

A = [1, 3, 4, 5, 7]
B = [2, 8, 9]
C = [6, 10]

现在我们可以使用in编写一个理解,并使用回退错误来保护:

julia> [x in A ? 1 : x in B ? 2 : 3 for x in 1:10]
10-element Array{Int64,1}:
 1
 ⋮
 3

如果输入错误,也许还包括回退错误

julia> [x in A ? 1 : x in B ? 2 : x in C ? 3 : error("not found") for x in 1:10]
10-element Array{Int64,1}:
 1
 ⋮
 3

1
投票

在这种情况下用于搜索的交易记忆:

  • 制作一个array来记录每个值所在的array
# example arrays
N=100; A=rand(1:N,30);
B = rand(1:N,40);
C = rand(1:N,35);
# record array containing each value: 
A=1,B=2,C=3; 
not found=0;
arrayin = zeros(Int32, max(maximum(A),maximum(B),maximum(C))); 
arrayin[A] .= 1; 
arrayin[B] .= 2; 
arrayin[C] .=3;

© www.soinside.com 2019 - 2024. All rights reserved.