如何在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
,它具有更好的性能和更少的内存开销,掩码中的点击量越大。