Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Indexing with Not(i::AbstractVector{Bool}) gives the incorrect result #101

Open
tomhaber opened this issue Nov 6, 2020 · 2 comments
Open

Comments

@tomhaber
Copy link
Contributor

tomhaber commented Nov 6, 2020

The indexing code with Not(bools) treats the booleans as indices 0 and 1 and thus captures all indices except 1.

For example:

julia> X = NamedArray(rand(10,5))
10×5 Named Array{Float64,2}
A ╲ B │         1          2          3          4          5
──────┼──────────────────────────────────────────────────────
1     │  0.818328   0.840304   0.473106   0.283691   0.245174
2     │  0.915175    0.95662   0.347404   0.113388   0.463306
3     │  0.749376    0.21087   0.634752    0.12749   0.548102
4     │   0.21976   0.225479   0.092484  0.0164488   0.990245
5     │  0.918221   0.106789   0.540831  0.0722173   0.779579
6     │  0.196055   0.692281   0.895311   0.348337   0.242474
7     │  0.551477   0.834262   0.945084   0.214824   0.522671
8     │ 0.0311555   0.934718   0.100138   0.720378   0.886131
9     │  0.997415  0.0865824  0.0703392   0.260739   0.518249
10    │  0.990844    0.39621   0.509232   0.829048   0.397102

julia> X[:, Not([true, false, true, false, true])]
10×4 Named Array{Float64,2}
A ╲ B │         2          3          4          5
──────┼───────────────────────────────────────────
1     │  0.840304   0.473106   0.283691   0.245174
2     │   0.95662   0.347404   0.113388   0.463306
3     │   0.21087   0.634752    0.12749   0.548102
4     │  0.225479   0.092484  0.0164488   0.990245
5     │  0.106789   0.540831  0.0722173   0.779579
6     │  0.692281   0.895311   0.348337   0.242474
7     │  0.834262   0.945084   0.214824   0.522671
8     │  0.934718   0.100138   0.720378   0.886131
9     │ 0.0865824  0.0703392   0.260739   0.518249
10    │   0.39621   0.509232   0.829048   0.397102
@davidavdav
Copy link
Owner

Hello,

I didn't make the package that provides Not (I think, I used to have one but we moved to a common Not), but I don't think this is the intended usage of Not. For your case, use

X[:, .![true, false, true, false, true]]

@tomhaber
Copy link
Contributor Author

tomhaber commented Nov 7, 2020

The InvertedIndices package actually does support the use of Not in this way. There is even special code to deal with this case specifically.

For example: same thing without the NamedArray

using InvertedIndices
julia> X = rand(10,5)
10×5 Array{Float64,2}:
 0.290501   0.0675099  0.0576696  0.935896   0.936226
 0.537722   0.622467   0.956746   0.483789   0.886105
 0.352586   0.841013   0.741045   0.625766   0.635618
 0.123232   0.0590852  0.449366   0.579803   0.61804
 0.0465393  0.34072    0.488103   0.284071   0.812611
 0.109587   0.674603   0.404623   0.111767   0.417153
 0.9696     0.189503   0.803316   0.418196   0.560244
 0.37363    0.845999   0.904044   0.361739   0.329037
 0.940953   0.865926   0.0521284  0.0375961  0.694446
 0.538775   0.399408   0.415636   0.509889   0.232651

julia> X[:, Not([true, false, true, false, true])]
10×2 Array{Float64,2}:
 0.0675099  0.935896
 0.622467   0.483789
 0.841013   0.625766
 0.0590852  0.579803
 0.34072    0.284071
 0.674603   0.111767
 0.189503   0.418196
 0.845999   0.361739
 0.865926   0.0375961
 0.399408   0.509889

The reason I would like to have the same behaviour, is to allow the user to provide an array of names, indices or booleans without having to special case the code based on the type of array passed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants