Documenting extract
This commit is contained in:
parent
60ff8c9131
commit
59fb5529aa
94
README.md
94
README.md
|
@ -160,6 +160,100 @@ e.g.
|
||||||
[nil nil nil "goodbye" nil]]
|
[nil nil nil "goodbye" nil]]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### extract
|
||||||
|
|
||||||
|
The whole point of working with sparse arrays is because we wish to work with
|
||||||
|
interesting subsets of arrays the entirety of which would be too large to
|
||||||
|
conveniently handle; thus perhaps the most important operation is to be able
|
||||||
|
to extract a sparse subset of an array.
|
||||||
|
|
||||||
|
`sparse-array.extract/extract ([array function])`
|
||||||
|
|
||||||
|
Return a sparse subset of this `array` - which may be either sparse or
|
||||||
|
dense - comprising all those cells for which this `function` returns a
|
||||||
|
'truthy' value.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
```clojure
|
||||||
|
(extract [[[1 2 3][:one :two :three]["one" "two" "three"]]
|
||||||
|
[[1 :two "three"]["one" 2 :three][:one "two" 3]]
|
||||||
|
[[1.0 2.0 3.0][2/2 4/2 6/2]["I" "II" "III"]]]
|
||||||
|
#(if
|
||||||
|
(number? %)
|
||||||
|
(= % 3)
|
||||||
|
(= (name %) "three")))
|
||||||
|
|
||||||
|
=> {:dimensions 3,
|
||||||
|
:coord :i0,
|
||||||
|
:content (:i1 :i2),
|
||||||
|
0
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :i1,
|
||||||
|
:content (:i2),
|
||||||
|
0 {:dimensions 1, :coord :i2, :content :data, 2 3},
|
||||||
|
1 {:dimensions 1, :coord :i2, :content :data, 2 :three},
|
||||||
|
2 {:dimensions 1, :coord :i2, :content :data, 2 "three"}},
|
||||||
|
1
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :i1,
|
||||||
|
:content (:i2),
|
||||||
|
0 {:dimensions 1, :coord :i2, :content :data, 2 "three"},
|
||||||
|
1 {:dimensions 1, :coord :i2, :content :data, 2 :three},
|
||||||
|
2 {:dimensions 1, :coord :i2, :content :data, 2 3}},
|
||||||
|
2
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :i1,
|
||||||
|
:content (:i2),
|
||||||
|
1 {:dimensions 1, :coord :i2, :content :data, 2 3}}}
|
||||||
|
```
|
||||||
|
|
||||||
|
### extract-from-dense
|
||||||
|
|
||||||
|
Note that the above example returns the default axis sequence {i0, i1, i2...};
|
||||||
|
extracting from a sparse array will always retain the axes of the array
|
||||||
|
extracted from. Dense arrays, obviously, do not have explicit axes.
|
||||||
|
|
||||||
|
You may wish to specify a sequence of axes when extracting from a dense array.
|
||||||
|
A function is provided:
|
||||||
|
|
||||||
|
`sparse-array.extract/extract-from-dense ([array function] [array function axes])`
|
||||||
|
|
||||||
|
Return a subset of this dense `array` comprising all those cells for which
|
||||||
|
this `function` returns a 'truthy' value. Use these `axes` if provided.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
```clojure
|
||||||
|
(extract-from-dense
|
||||||
|
[[[1 2 3][:one :two :three]["one" "two" "three"]]
|
||||||
|
[[1 :two "three"]["one" 2 :three][:one "two" 3]]
|
||||||
|
[[1.0 2.0 3.0][2/2 4/2 6/2]["I" "II" "III"]]]
|
||||||
|
integer?
|
||||||
|
'(:p :q :r))
|
||||||
|
|
||||||
|
=> {:dimensions 3,
|
||||||
|
:coord :p,
|
||||||
|
:content (:q :r),
|
||||||
|
0
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :q,
|
||||||
|
:content (:r),
|
||||||
|
0 {:dimensions 1, :coord :r, :content :data, 0 1, 1 2, 2 3}},
|
||||||
|
1
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :q,
|
||||||
|
:content (:r),
|
||||||
|
0 {:dimensions 1, :coord :r, :content :data, 0 1},
|
||||||
|
1 {:dimensions 1, :coord :r, :content :data, 1 2},
|
||||||
|
2 {:dimensions 1, :coord :r, :content :data, 2 3}},
|
||||||
|
2
|
||||||
|
{:dimensions 2,
|
||||||
|
:coord :q,
|
||||||
|
:content (:r),
|
||||||
|
1 {:dimensions 1, :coord :r, :content :data, 0 1, 1 2, 2 3}}}
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Copyright © 2019 Simon Brooke
|
Copyright © 2019 Simon Brooke
|
||||||
|
|
Loading…
Reference in a new issue