如何在Julia中将集合分解为子集?

如何在Julia中将集合分解为子集?,julia,Julia,有输入列表X和输出列表Y。每个输入可以是1成功或0失败 X = [6 7 8] Y = [1 1 0] 将输入X分为两组的方法是什么-成功和失败 XSuccess = [6 7] XFails = [8] 我可以用循环来解决这个问题,但似乎至少有两种更好的方法来解决它——使用find函数和list comprehensions XSuccess = getindex(X,find(Y)) XFail = getindex(X, find(x->x==0,Y)) 检查数组索引正如您所指

有输入列表
X
和输出列表
Y
。每个输入可以是
1
成功或
0
失败

X = [6 7 8]
Y = [1 1 0]
将输入
X
分为两组的方法是什么-成功和失败

XSuccess = [6 7]
XFails = [8]
我可以用循环来解决这个问题,但似乎至少有两种更好的方法来解决它——使用find函数和list comprehensions

XSuccess = getindex(X,find(Y))
XFail = getindex(X, find(x->x==0,Y))

检查数组索引

正如您所指出的,有几种方法可以做到这一点。让我们先看看
find()
函数方法,然后再看看列表理解方法

x=[6,7,8]
y=[1,1,0]
xsucc=x[find(y.==1)]
xfail=x[查找(y.==0)]
对于列表理解方法,我们可以做如下操作

x=[6,7,8]
y=[1,1,0]
xsucc=[w代表x[y.==1]]
xfail=[w代表x[y.==0]]

其中,我不确定哪一个被认为是最惯用的Julia代码(也许两者都不是)。

我不确定Julia是否具有
分区
功能,但您可以始终应用
过滤器
两次。在这个问题中,
每个输入…
可能应该是
每个输出…
。此外,
X=[6 7 8]
可能应该是
X=[6,7,8]
,因为前者是2D矩阵,后者是1D向量(看起来更符合逻辑)
XSuccess=X[Vector{Bool}(Y)]
XFails=X[!Vector{Bool}(Y)]
。最后,如果
Y=[11 0]
被替换为
Y=Bool[1,1,0]
,那么只需
XSuccess=X[Y]
XFail=X[!Y]
find
,它具有更好的性能和更少的内存开销,掩码中的点击量越大。