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]]
|
||||
```
|
||||
|
||||
### 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
|
||||
|
||||
Copyright © 2019 Simon Brooke
|
||||
|
|
Loading…
Reference in a new issue