@stdlib/ndarray-base 0.0.6 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CITATION.cff +30 -0
- package/LICENSE +0 -304
- package/NOTICE +1 -1
- package/README.md +141 -6
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +7 -0
- package/docs/types/index.d.ts +914 -13
- package/lib/index.js +310 -0
- package/package.json +222 -138
- package/docs/types/test.ts +0 -29
package/docs/types/index.d.ts
CHANGED
|
@@ -16,32 +16,58 @@
|
|
|
16
16
|
* limitations under the License.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
// TypeScript Version:
|
|
19
|
+
// TypeScript Version: 4.1
|
|
20
20
|
|
|
21
21
|
/* tslint:disable:max-line-length */
|
|
22
22
|
/* tslint:disable:max-file-line-count */
|
|
23
23
|
|
|
24
24
|
import assert = require( '@stdlib/ndarray-base-assert' );
|
|
25
|
+
import binaryLoopOrder = require( '@stdlib/ndarray-base-binary-loop-interchange-order' );
|
|
26
|
+
import binaryBlockSize = require( '@stdlib/ndarray-base-binary-tiling-block-size' );
|
|
25
27
|
import bind2vind = require( '@stdlib/ndarray-base-bind2vind' );
|
|
26
28
|
import broadcastArray = require( '@stdlib/ndarray-base-broadcast-array' );
|
|
29
|
+
import broadcastScalar = require( '@stdlib/ndarray-base-broadcast-scalar' );
|
|
27
30
|
import broadcastShapes = require( '@stdlib/ndarray-base-broadcast-shapes' );
|
|
28
31
|
import buffer = require( '@stdlib/ndarray-base-buffer' );
|
|
29
32
|
import bufferCtors = require( '@stdlib/ndarray-base-buffer-ctors' );
|
|
30
33
|
import bufferDataType = require( '@stdlib/ndarray-base-buffer-dtype' );
|
|
31
34
|
import bufferDataTypeEnum = require( '@stdlib/ndarray-base-buffer-dtype-enum' );
|
|
32
35
|
import bytesPerElement = require( '@stdlib/ndarray-base-bytes-per-element' );
|
|
36
|
+
import char2dtype = require( '@stdlib/ndarray-base-char2dtype' );
|
|
33
37
|
import clampIndex = require( '@stdlib/ndarray-base-clamp-index' );
|
|
34
38
|
import ndarray = require( '@stdlib/ndarray-base-ctor' );
|
|
35
39
|
import dtypeChar = require( '@stdlib/ndarray-base-dtype-char' );
|
|
40
|
+
import dtypeDesc = require( '@stdlib/ndarray-base-dtype-desc' );
|
|
41
|
+
import dtypeEnum2Str = require( '@stdlib/ndarray-base-dtype-enum2str' );
|
|
42
|
+
import dtypeResolveEnum = require( '@stdlib/ndarray-base-dtype-resolve-enum' );
|
|
43
|
+
import dtypeResolveStr = require( '@stdlib/ndarray-base-dtype-resolve-str' );
|
|
44
|
+
import dtypeStr2Enum = require( '@stdlib/ndarray-base-dtype-str2enum' );
|
|
45
|
+
import dtype2c = require( '@stdlib/ndarray-base-dtype2c' );
|
|
36
46
|
import dtypes2signatures = require( '@stdlib/ndarray-base-dtypes2signatures' );
|
|
47
|
+
import empty = require( '@stdlib/ndarray-base-empty' );
|
|
48
|
+
import emptyLike = require( '@stdlib/ndarray-base-empty-like' );
|
|
49
|
+
import expandDimensions = require( '@stdlib/ndarray-base-expand-dimensions' );
|
|
50
|
+
import scalar2ndarray = require( '@stdlib/ndarray-base-from-scalar' );
|
|
37
51
|
import ind = require( '@stdlib/ndarray-base-ind' );
|
|
38
52
|
import ind2sub = require( '@stdlib/ndarray-base-ind2sub' );
|
|
39
53
|
import iterationOrder = require( '@stdlib/ndarray-base-iteration-order' );
|
|
40
54
|
import maxViewBufferIndex = require( '@stdlib/ndarray-base-max-view-buffer-index' );
|
|
55
|
+
import maybeBroadcastArray = require( '@stdlib/ndarray-base-maybe-broadcast-array' );
|
|
56
|
+
import metaDataProps = require( '@stdlib/ndarray-base-meta-data-props' );
|
|
41
57
|
import minViewBufferIndex = require( '@stdlib/ndarray-base-min-view-buffer-index' );
|
|
42
58
|
import minmaxViewBufferIndex = require( '@stdlib/ndarray-base-minmax-view-buffer-index' );
|
|
59
|
+
import ndarraylike2object = require( '@stdlib/ndarray-base-ndarraylike2object' );
|
|
43
60
|
import nonsingletonDimensions = require( '@stdlib/ndarray-base-nonsingleton-dimensions' );
|
|
61
|
+
import nullary = require( '@stdlib/ndarray-base-nullary' );
|
|
62
|
+
import nullaryLoopOrder = require( '@stdlib/ndarray-base-nullary-loop-interchange-order' );
|
|
63
|
+
import nullaryBlockSize = require( '@stdlib/ndarray-base-nullary-tiling-block-size' );
|
|
44
64
|
import numel = require( '@stdlib/ndarray-base-numel' );
|
|
65
|
+
import outputPolicyEnum2Str = require( '@stdlib/ndarray-base-output-policy-enum2str' );
|
|
66
|
+
import outputPolicyResolveEnum = require( '@stdlib/ndarray-base-output-policy-resolve-enum' );
|
|
67
|
+
import outputPolicyResolveStr = require( '@stdlib/ndarray-base-output-policy-resolve-str' );
|
|
68
|
+
import outputPolicyStr2Enum = require( '@stdlib/ndarray-base-output-policy-str2enum' );
|
|
69
|
+
import prependSingletonDimensions = require( '@stdlib/ndarray-base-prepend-singleton-dimensions' );
|
|
70
|
+
import removeSingletonDimensions = require( '@stdlib/ndarray-base-remove-singleton-dimensions' );
|
|
45
71
|
import serializeMetaData = require( '@stdlib/ndarray-base-serialize-meta-data' );
|
|
46
72
|
import shape2strides = require( '@stdlib/ndarray-base-shape2strides' );
|
|
47
73
|
import singletonDimensions = require( '@stdlib/ndarray-base-singleton-dimensions' );
|
|
@@ -49,8 +75,16 @@ import strides2offset = require( '@stdlib/ndarray-base-strides2offset' );
|
|
|
49
75
|
import strides2order = require( '@stdlib/ndarray-base-strides2order' );
|
|
50
76
|
import sub2ind = require( '@stdlib/ndarray-base-sub2ind' );
|
|
51
77
|
import ndarray2array = require( '@stdlib/ndarray-base-to-array' );
|
|
78
|
+
import transpose = require( '@stdlib/ndarray-base-transpose' );
|
|
79
|
+
import unary = require( '@stdlib/ndarray-base-unary' );
|
|
80
|
+
import unaryBy = require( '@stdlib/ndarray-base-unary-by' );
|
|
81
|
+
import unaryLoopOrder = require( '@stdlib/ndarray-base-unary-loop-interchange-order' );
|
|
82
|
+
import unaryOutputDataType = require( '@stdlib/ndarray-base-unary-output-dtype' );
|
|
83
|
+
import unaryBlockSize = require( '@stdlib/ndarray-base-unary-tiling-block-size' );
|
|
52
84
|
import vind2bind = require( '@stdlib/ndarray-base-vind2bind' );
|
|
53
85
|
import wrapIndex = require( '@stdlib/ndarray-base-wrap-index' );
|
|
86
|
+
import zeros = require( '@stdlib/ndarray-base-zeros' );
|
|
87
|
+
import zerosLike = require( '@stdlib/ndarray-base-zeros-like' );
|
|
54
88
|
|
|
55
89
|
/**
|
|
56
90
|
* Interface describing the `base` namespace.
|
|
@@ -61,6 +95,70 @@ interface Namespace {
|
|
|
61
95
|
*/
|
|
62
96
|
assert: typeof assert;
|
|
63
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Reorders ndarray dimensions and associated strides for loop interchange.
|
|
100
|
+
*
|
|
101
|
+
* ## Notes
|
|
102
|
+
*
|
|
103
|
+
* - The returned object has the following properties:
|
|
104
|
+
*
|
|
105
|
+
* - **sh**: dimensions sorted in loop order.
|
|
106
|
+
* - **sx**: first input ndarray strides sorted in loop order.
|
|
107
|
+
* - **sy**: second input ndarray strides sorted in loop order.
|
|
108
|
+
* - **sz**: output ndarray strides sorted in loop order.
|
|
109
|
+
*
|
|
110
|
+
* - When iterating over the elements of a multi-dimensional array, accessing elements which are closer in memory can improve performance. To this end, loop interchange is a technique used in loop nest optimization to improve locality of reference and take advantage of CPU cache.
|
|
111
|
+
*
|
|
112
|
+
* The purpose of this function is to order ndarray dimensions according to the magnitude of array strides. By using the ordered dimensions and associated strides, one can construct nested loops (one for each dimension) such that the innermost loop iterates over the dimension in which array elements are closest in memory and the outermost loop iterates over the dimension in which array elements are farthest apart in memory. As a consequence, element iteration is optimized to minimize cache misses and ensure locality of reference.
|
|
113
|
+
*
|
|
114
|
+
* - Cache performance may be degraded if the layout order (i.e., row-major or column-major) differs for the input and output ndarrays. This function is intended to optimize cache performance for the most common layout order. Accordingly, if the output ndarray has a different layout order (e.g., if the input ndarrays are row-major and the output ndarray is column-major), cache misses are likely for the output ndarray. In general, to ensure best performance, input and output ndarrays should have the same layout order.
|
|
115
|
+
*
|
|
116
|
+
* - The function assumes that the input and output ndarrays have the same shape. Hence, loop interchange order should only be determined **after** broadcasting.
|
|
117
|
+
*
|
|
118
|
+
* @param sh - array dimensions
|
|
119
|
+
* @param sx - first input array stride lengths
|
|
120
|
+
* @param sy - second input array stride lengths
|
|
121
|
+
* @param sz - output array stride lengths
|
|
122
|
+
* @returns loop interchange data
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* var sh = [ 2, 3, 4 ];
|
|
126
|
+
*
|
|
127
|
+
* var sx = [ 12, 4, 1 ]; // row-major
|
|
128
|
+
* var sy = [ 24, 8, 1 ]; // row-major
|
|
129
|
+
* var sz = [ 1, -2, 6 ]; // column-major
|
|
130
|
+
*
|
|
131
|
+
* var o = loopOrder( sh, sx, sy, sz );
|
|
132
|
+
* // returns {...}
|
|
133
|
+
*
|
|
134
|
+
* var ssh = o.sh;
|
|
135
|
+
* // returns [ 4, 3, 2 ]
|
|
136
|
+
*
|
|
137
|
+
* var ssx = o.sx;
|
|
138
|
+
* // returns [ 1, 4, 12 ]
|
|
139
|
+
*
|
|
140
|
+
* var ssy = o.sy;
|
|
141
|
+
* // returns [ 1, 8, 24 ]
|
|
142
|
+
*
|
|
143
|
+
* var ssz = o.sz;
|
|
144
|
+
* // returns [ 6, -2, 1 ]
|
|
145
|
+
*/
|
|
146
|
+
binaryLoopOrder: typeof binaryLoopOrder;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Returns a loop block size for multi-dimensional array tiled loops.
|
|
150
|
+
*
|
|
151
|
+
* @param dtypeX - first input array data type
|
|
152
|
+
* @param dtypeY - second input array data type
|
|
153
|
+
* @param dtypeZ - output array data type
|
|
154
|
+
* @returns block size (in units of elements)
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* var bsize = ns.binaryBlockSize( 'float64', 'float64', 'float64' );
|
|
158
|
+
* // returns <number>
|
|
159
|
+
*/
|
|
160
|
+
binaryBlockSize: typeof binaryBlockSize;
|
|
161
|
+
|
|
64
162
|
/**
|
|
65
163
|
* Converts a linear index in an underlying data buffer to a linear index in an array view.
|
|
66
164
|
*
|
|
@@ -136,6 +234,30 @@ interface Namespace {
|
|
|
136
234
|
*/
|
|
137
235
|
broadcastArray: typeof broadcastArray;
|
|
138
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Broadcasts a scalar value to an ndarray having a specified shape.
|
|
239
|
+
*
|
|
240
|
+
* @param value - scalar value
|
|
241
|
+
* @param dtype - array data type
|
|
242
|
+
* @param shape - array shape
|
|
243
|
+
* @param order - array order
|
|
244
|
+
* @returns ndarray
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* var x = ns.broadcastScalar( 1.0, 'generic', [ 2, 2 ], 'row-major' );
|
|
248
|
+
* // returns <ndarray>
|
|
249
|
+
*
|
|
250
|
+
* var sh = x.shape;
|
|
251
|
+
* // returns [ 2, 2 ]
|
|
252
|
+
*
|
|
253
|
+
* var dt = x.dtype;
|
|
254
|
+
* // returns 'generic'
|
|
255
|
+
*
|
|
256
|
+
* var v = x.get( 0, 1 );
|
|
257
|
+
* // returns 1.0
|
|
258
|
+
*/
|
|
259
|
+
broadcastScalar: typeof broadcastScalar;
|
|
260
|
+
|
|
139
261
|
/**
|
|
140
262
|
* Broadcasts array shapes to a single shape.
|
|
141
263
|
*
|
|
@@ -360,6 +482,17 @@ interface Namespace {
|
|
|
360
482
|
*/
|
|
361
483
|
bytesPerElement: typeof bytesPerElement;
|
|
362
484
|
|
|
485
|
+
/**
|
|
486
|
+
* Returns an object mapping single letter character abbreviations to data type strings.
|
|
487
|
+
*
|
|
488
|
+
* @returns object mapping single letter character abbreviations to data type strings
|
|
489
|
+
*
|
|
490
|
+
* @example
|
|
491
|
+
* var out = ns.char2dtype();
|
|
492
|
+
* // returns {...}
|
|
493
|
+
*/
|
|
494
|
+
char2dtype: typeof char2dtype;
|
|
495
|
+
|
|
363
496
|
/**
|
|
364
497
|
* Restricts an index to the interval `[0,max]`.
|
|
365
498
|
*
|
|
@@ -414,27 +547,112 @@ interface Namespace {
|
|
|
414
547
|
ndarray: typeof ndarray;
|
|
415
548
|
|
|
416
549
|
/**
|
|
417
|
-
* Returns
|
|
550
|
+
* Returns an object mapping data type strings to single letter character abbreviations.
|
|
418
551
|
*
|
|
419
|
-
* @
|
|
420
|
-
* @returns single letter character abbreviation
|
|
552
|
+
* @returns object mapping data type strings to single letter character abbreviations
|
|
421
553
|
*
|
|
422
554
|
* @example
|
|
423
|
-
* var
|
|
424
|
-
* // returns
|
|
425
|
-
*
|
|
426
|
-
* ch = ns.dtypeChar( 'generic' );
|
|
427
|
-
* // returns 'o'
|
|
555
|
+
* var obj = ns.dtypeChar();
|
|
556
|
+
* // returns {...}
|
|
428
557
|
*/
|
|
429
558
|
dtypeChar: typeof dtypeChar;
|
|
430
559
|
|
|
560
|
+
/**
|
|
561
|
+
* Returns an object mapping data type strings to descriptions.
|
|
562
|
+
*
|
|
563
|
+
* @returns object mapping data type strings to descriptions
|
|
564
|
+
*
|
|
565
|
+
* @example
|
|
566
|
+
* var obj = ns.dtypeDesc();
|
|
567
|
+
* // returns {...}
|
|
568
|
+
*/
|
|
569
|
+
dtypeDesc: typeof dtypeDesc;
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Returns the data type string associated with an ndarray data type enumeration constant.
|
|
573
|
+
*
|
|
574
|
+
* @param dtype - data type enumeration constant
|
|
575
|
+
* @returns data type string
|
|
576
|
+
*
|
|
577
|
+
* @example
|
|
578
|
+
* var str2enum = require( `@stdlib/ndarray/base/dtype-str2enum` );
|
|
579
|
+
*
|
|
580
|
+
* var v = str2enum( 'float64' );
|
|
581
|
+
* // returns <number>
|
|
582
|
+
*
|
|
583
|
+
* var dt = ns.dtypeEnum2Str( v );
|
|
584
|
+
* // returns 'float64'
|
|
585
|
+
*/
|
|
586
|
+
dtypeEnum2Str: typeof dtypeEnum2Str;
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Returns the enumeration constant associated with an ndarray data type value.
|
|
590
|
+
*
|
|
591
|
+
* ## Notes
|
|
592
|
+
*
|
|
593
|
+
* - Downstream consumers of this function should **not** rely on specific integer values (e.g., `INT8 == 0`). Instead, the function should be used in an opaque manner.
|
|
594
|
+
*
|
|
595
|
+
* @param dtype - data type value
|
|
596
|
+
* @returns enumeration constant
|
|
597
|
+
*
|
|
598
|
+
* @example
|
|
599
|
+
* var v = ns.dtypeResolveEnum( 'float64' );
|
|
600
|
+
* // returns <number>
|
|
601
|
+
*/
|
|
602
|
+
dtypeResolveEnum: typeof dtypeResolveEnum;
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Returns the data type string associated with an ndarray data type value.
|
|
606
|
+
*
|
|
607
|
+
* @param dtype - data type value
|
|
608
|
+
* @returns data type string
|
|
609
|
+
*
|
|
610
|
+
* @example
|
|
611
|
+
* var str2enum = require( `@stdlib/ndarray/base/dtype-str2enum` );
|
|
612
|
+
*
|
|
613
|
+
* var v = ns.dtypeResolveStr( str2enum( 'float64' ) );
|
|
614
|
+
* // returns 'float64'
|
|
615
|
+
*/
|
|
616
|
+
dtypeResolveStr: typeof dtypeResolveStr;
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* Returns the enumeration constant associated with a ndarray data type string.
|
|
620
|
+
*
|
|
621
|
+
* ## Notes
|
|
622
|
+
*
|
|
623
|
+
* - Downstream consumers of this function should **not** rely on specific integer values (e.g., `INT8 == 0`). Instead, the function should be used in an opaque manner.
|
|
624
|
+
*
|
|
625
|
+
* @param dtype - data type string
|
|
626
|
+
* @returns enumeration constant
|
|
627
|
+
*
|
|
628
|
+
* @example
|
|
629
|
+
* var v = ns.dtypeStr2Enum( 'float64' );
|
|
630
|
+
* // returns <number>
|
|
631
|
+
*/
|
|
632
|
+
dtypeStr2Enum: typeof dtypeStr2Enum;
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Returns the C data type associated with a provided data type value.
|
|
636
|
+
*
|
|
637
|
+
* @param dtype - data type value
|
|
638
|
+
* @returns C data type (or null)
|
|
639
|
+
*
|
|
640
|
+
* @example
|
|
641
|
+
* var out = ns.dtype2c( 'float64' );
|
|
642
|
+
* // returns 'double'
|
|
643
|
+
*
|
|
644
|
+
* out = ns.dtype2c( 'generic' );
|
|
645
|
+
* // returns null
|
|
646
|
+
*/
|
|
647
|
+
dtype2c: typeof dtype2c;
|
|
648
|
+
|
|
431
649
|
/**
|
|
432
650
|
* Transforms a list of array argument data types into a list of signatures.
|
|
433
651
|
*
|
|
434
652
|
* @param dtypes - list of array argument data types
|
|
435
653
|
* @param nin - number of input array arguments
|
|
436
654
|
* @param nout - number of output array arguments
|
|
437
|
-
* @throws first argument must be an array-like object
|
|
655
|
+
* @throws first argument must be an array-like object
|
|
438
656
|
* @throws second argument must be a nonnegative integer
|
|
439
657
|
* @throws third argument must be a nonnegative integer
|
|
440
658
|
* @throws first argument must have at least one element
|
|
@@ -452,6 +670,118 @@ interface Namespace {
|
|
|
452
670
|
*/
|
|
453
671
|
dtypes2signatures: typeof dtypes2signatures;
|
|
454
672
|
|
|
673
|
+
/**
|
|
674
|
+
* Creates an uninitialized array having a specified shape and data type.
|
|
675
|
+
*
|
|
676
|
+
* @param dtype - underlying data type
|
|
677
|
+
* @param shape - array shape
|
|
678
|
+
* @param order - specifies whether an array is row-major (C-style) or column-major (Fortran-style)
|
|
679
|
+
* @returns output array
|
|
680
|
+
*
|
|
681
|
+
* @example
|
|
682
|
+
* var arr = ns.empty( 'float32', [ 2, 2 ], 'row-major' );
|
|
683
|
+
* // returns <ndarray>
|
|
684
|
+
*
|
|
685
|
+
* var sh = arr.shape;
|
|
686
|
+
* // returns [ 2, 2 ]
|
|
687
|
+
*
|
|
688
|
+
* var dt = arr.dtype;
|
|
689
|
+
* // returns 'float32'
|
|
690
|
+
*/
|
|
691
|
+
empty: typeof empty;
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* Creates an uninitialized array having the same shape and data type as a provided input ndarray.
|
|
695
|
+
*
|
|
696
|
+
* @param x - input array
|
|
697
|
+
* @returns output array
|
|
698
|
+
*
|
|
699
|
+
* @example
|
|
700
|
+
* var zeros = require( `@stdlib/ndarray/base/zeros` );
|
|
701
|
+
*
|
|
702
|
+
* var x = zeros( 'generic', [ 2, 2 ], 'row-major' );
|
|
703
|
+
* // returns <ndarray>
|
|
704
|
+
*
|
|
705
|
+
* var sh = x.shape;
|
|
706
|
+
* // returns [ 2, 2 ]
|
|
707
|
+
*
|
|
708
|
+
* var dt = x.dtype;
|
|
709
|
+
* // returns 'generic'
|
|
710
|
+
*
|
|
711
|
+
* var y = ns.emptyLike( x );
|
|
712
|
+
* // returns <ndarray>
|
|
713
|
+
*
|
|
714
|
+
* sh = y.shape;
|
|
715
|
+
* // returns [ 2, 2 ]
|
|
716
|
+
*
|
|
717
|
+
* dt = y.dtype;
|
|
718
|
+
* // returns 'generic'
|
|
719
|
+
*/
|
|
720
|
+
emptyLike: typeof emptyLike;
|
|
721
|
+
|
|
722
|
+
/**
|
|
723
|
+
* Expands the shape of an array by inserting a new dimension of size one at a specified axis.
|
|
724
|
+
*
|
|
725
|
+
* ## Notes
|
|
726
|
+
*
|
|
727
|
+
* - A provided axis must reside on the interval `[-N-1, N]`, where `N` is the rank (i.e., number of dimensions) of the provided input array. If provided a negative `axis`, the axis position at which to insert a singleton dimension is computed as `N + axis + 1`. Hence, if provided `-1`, the resolved axis position is `N` (i.e., a singleton dimension is appended to the input array).
|
|
728
|
+
*
|
|
729
|
+
* @param x - input array
|
|
730
|
+
* @param axis - axis at which to insert a singleton dimension
|
|
731
|
+
* @returns output array
|
|
732
|
+
*
|
|
733
|
+
* @example
|
|
734
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
735
|
+
*
|
|
736
|
+
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
|
|
737
|
+
* // returns <ndarray>
|
|
738
|
+
*
|
|
739
|
+
* var shx = x.shape;
|
|
740
|
+
* // returns [ 2, 2 ]
|
|
741
|
+
*
|
|
742
|
+
* var y = ns.expandDimensions( x, 1 );
|
|
743
|
+
* // returns <ndarray>
|
|
744
|
+
*
|
|
745
|
+
* var shy = y.shape;
|
|
746
|
+
* // returns [ 2, 1, 2 ]
|
|
747
|
+
*
|
|
748
|
+
* var v = y.get( 0, 0, 0 );
|
|
749
|
+
* // returns 1
|
|
750
|
+
*
|
|
751
|
+
* v = y.get( 0, 0, 1 );
|
|
752
|
+
* // returns 2
|
|
753
|
+
*
|
|
754
|
+
* v = y.get( 1, 0, 0 );
|
|
755
|
+
* // returns 3
|
|
756
|
+
*
|
|
757
|
+
* v = y.get( 1, 0, 1 );
|
|
758
|
+
* // returns 4
|
|
759
|
+
*/
|
|
760
|
+
expandDimensions: typeof expandDimensions;
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Returns a zero-dimensional ndarray containing a provided scalar value.
|
|
764
|
+
*
|
|
765
|
+
* @param value - scalar value
|
|
766
|
+
* @param dtype - array data type
|
|
767
|
+
* @param order - memory layout (row-major or column-major)
|
|
768
|
+
* @returns zero-dimensional ndarray
|
|
769
|
+
*
|
|
770
|
+
* @example
|
|
771
|
+
* var x = ns.scalar2ndarray( 1.0, 'generic', 'row-major' );
|
|
772
|
+
* // returns <ndarray>
|
|
773
|
+
*
|
|
774
|
+
* var sh = x.shape;
|
|
775
|
+
* // returns []
|
|
776
|
+
*
|
|
777
|
+
* var dt = x.dtype;
|
|
778
|
+
* // returns 'generic'
|
|
779
|
+
*
|
|
780
|
+
* var v = x.get();
|
|
781
|
+
* // returns 1.0
|
|
782
|
+
*/
|
|
783
|
+
scalar2ndarray: typeof scalar2ndarray;
|
|
784
|
+
|
|
455
785
|
/**
|
|
456
786
|
* Returns an index given an index mode.
|
|
457
787
|
*
|
|
@@ -663,6 +993,92 @@ interface Namespace {
|
|
|
663
993
|
*/
|
|
664
994
|
maxViewBufferIndex: typeof maxViewBufferIndex;
|
|
665
995
|
|
|
996
|
+
/**
|
|
997
|
+
* Broadcasts an ndarray to a specified shape if and only if the specified shape differs from the provided ndarray's shape.
|
|
998
|
+
*
|
|
999
|
+
* ## Notes
|
|
1000
|
+
*
|
|
1001
|
+
* - The function throws an error if a provided ndarray is incompatible with a provided shape.
|
|
1002
|
+
* - If a provided ndarray has the same shape as the specified shape, the function returns the provided ndarray.
|
|
1003
|
+
* - If a provided ndarray has a different (broadcast compatible) shape than the specified shape, the function returns a new (base) ndarray view of the provided ndarray's data. The view is typically **not** contiguous. As more than one element of a returned view may refer to the same memory location, writing to the view may affect multiple elements. If you need to write to the returned array, copy the array before performing operations which may mutate elements.
|
|
1004
|
+
* - A returned array view is a "base" ndarray, and, thus, a returned array view does not perform bounds checking or afford any of the guarantees of the non-base ndarray constructor. The primary intent of this function is to broadcast an ndarray-like object within internal implementations and to do so with minimal overhead.
|
|
1005
|
+
*
|
|
1006
|
+
* @param arr - input array
|
|
1007
|
+
* @param shape - desired shape
|
|
1008
|
+
* @throws input array cannot have more dimensions than the desired shape
|
|
1009
|
+
* @throws input array dimension sizes must be `1` or equal to the corresponding dimension in the provided shape
|
|
1010
|
+
* @throws input array and desired shape must be broadcast compatible
|
|
1011
|
+
* @returns broadcasted array
|
|
1012
|
+
*
|
|
1013
|
+
* @example
|
|
1014
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
1015
|
+
*
|
|
1016
|
+
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
|
|
1017
|
+
* // returns <ndarray>
|
|
1018
|
+
*
|
|
1019
|
+
* var shx = x.shape;
|
|
1020
|
+
* // returns [ 2, 2 ]
|
|
1021
|
+
*
|
|
1022
|
+
* var y = ns.maybeBroadcastArray( x, [ 3, 2, 2 ] );
|
|
1023
|
+
* // returns <ndarray>
|
|
1024
|
+
*
|
|
1025
|
+
* var shy = y.shape;
|
|
1026
|
+
* // returns [ 3, 2, 2 ]
|
|
1027
|
+
*
|
|
1028
|
+
* var v = y.get( 0, 0, 0 );
|
|
1029
|
+
* // returns 1
|
|
1030
|
+
*
|
|
1031
|
+
* v = y.get( 0, 0, 1 );
|
|
1032
|
+
* // returns 2
|
|
1033
|
+
*
|
|
1034
|
+
* v = y.get( 1, 0, 0 );
|
|
1035
|
+
* // returns 1
|
|
1036
|
+
*
|
|
1037
|
+
* v = y.get( 1, 1, 0 );
|
|
1038
|
+
* // returns 3
|
|
1039
|
+
*
|
|
1040
|
+
* v = y.get( 2, 0, 0 );
|
|
1041
|
+
* // returns 1
|
|
1042
|
+
*
|
|
1043
|
+
* v = y.get( 2, 1, 1 );
|
|
1044
|
+
* // returns 4
|
|
1045
|
+
*/
|
|
1046
|
+
maybeBroadcastArray: typeof maybeBroadcastArray;
|
|
1047
|
+
|
|
1048
|
+
/**
|
|
1049
|
+
* Defines non-enumerable read-only properties which expose ndarray function meta data.
|
|
1050
|
+
*
|
|
1051
|
+
* @param meta - function meta data
|
|
1052
|
+
* @param meta.nargs - total number of arguments
|
|
1053
|
+
* @param meta.nin - total number of input arrays
|
|
1054
|
+
* @param meta.nout - total number of output arrays
|
|
1055
|
+
* @param dtypes - list of ndarray data types
|
|
1056
|
+
* @param obj - object on which to define properties
|
|
1057
|
+
* @returns object on which properties were defined
|
|
1058
|
+
*
|
|
1059
|
+
* @example
|
|
1060
|
+
* // Define ndarray function meta data:
|
|
1061
|
+
* var meta = {
|
|
1062
|
+
* 'nargs': 2,
|
|
1063
|
+
* 'nin': 1,
|
|
1064
|
+
* 'nout': 1
|
|
1065
|
+
* };
|
|
1066
|
+
*
|
|
1067
|
+
* // Define the list of ndarray data types:
|
|
1068
|
+
* var dtypes = [
|
|
1069
|
+
* 'float64', 'float64',
|
|
1070
|
+
* 'float32', 'float32',
|
|
1071
|
+
* 'generic', 'generic'
|
|
1072
|
+
* ];
|
|
1073
|
+
*
|
|
1074
|
+
* // Define an object/function on which to set the properties:
|
|
1075
|
+
* var obj = {};
|
|
1076
|
+
*
|
|
1077
|
+
* // Set the properties:
|
|
1078
|
+
* ns.metaDataProps( meta, dtypes, obj );
|
|
1079
|
+
*/
|
|
1080
|
+
metaDataProps: typeof metaDataProps;
|
|
1081
|
+
|
|
666
1082
|
/**
|
|
667
1083
|
* Computes the minimum linear index in an underlying data buffer accessible to an array view.
|
|
668
1084
|
*
|
|
@@ -747,6 +1163,26 @@ interface Namespace {
|
|
|
747
1163
|
*/
|
|
748
1164
|
minmaxViewBufferIndex: typeof minmaxViewBufferIndex;
|
|
749
1165
|
|
|
1166
|
+
/**
|
|
1167
|
+
* Converts an ndarray-like to an object likely to have the same "shape".
|
|
1168
|
+
*
|
|
1169
|
+
* ## Notes
|
|
1170
|
+
*
|
|
1171
|
+
* - This function is intended as a potential performance optimization. In V8, for example, even if two objects share common properties, if those properties were added in different orders or if one object has additional properties not shared by the other object, then those objects will have different "hidden" classes. If a function is provided many objects having different "shapes", some JavaScript VMs (e.g., V8) will consider the function "megamorphic" and fail to perform various runtime optimizations. Accordingly, the intent of this function is to standardize the "shape" of the object holding ndarray meta data to ensure that internal functions operating on ndarrays are provided consistent argument "shapes".
|
|
1172
|
+
*
|
|
1173
|
+
* @param x - input ndarray
|
|
1174
|
+
* @returns object containing ndarray data
|
|
1175
|
+
*
|
|
1176
|
+
* @example
|
|
1177
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
1178
|
+
*
|
|
1179
|
+
* var x = array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] );
|
|
1180
|
+
*
|
|
1181
|
+
* var obj = ns.ndarraylike2object( x );
|
|
1182
|
+
* // returns {...}
|
|
1183
|
+
*/
|
|
1184
|
+
ndarraylike2object: typeof ndarraylike2object;
|
|
1185
|
+
|
|
750
1186
|
/**
|
|
751
1187
|
* Returns the number of non-singleton dimensions.
|
|
752
1188
|
*
|
|
@@ -767,6 +1203,89 @@ interface Namespace {
|
|
|
767
1203
|
*/
|
|
768
1204
|
nonsingletonDimensions: typeof nonsingletonDimensions;
|
|
769
1205
|
|
|
1206
|
+
/**
|
|
1207
|
+
* Applies a nullary callback and assigns results to elements in an output ndarray.
|
|
1208
|
+
*
|
|
1209
|
+
* @param arrays - array-like object containing an output ndarray
|
|
1210
|
+
* @param fcn - nullary callback
|
|
1211
|
+
*
|
|
1212
|
+
* @example
|
|
1213
|
+
* var Float64Array = require( `@stdlib/array/float64` );
|
|
1214
|
+
* var ndarray = require( `@stdlib/ndarray/ctor` );
|
|
1215
|
+
*
|
|
1216
|
+
* function fcn() {
|
|
1217
|
+
* return 10.0;
|
|
1218
|
+
* }
|
|
1219
|
+
*
|
|
1220
|
+
* // Create data buffers:
|
|
1221
|
+
* var xbuf = new Float64Array( 12 );
|
|
1222
|
+
*
|
|
1223
|
+
* // Define the shape of the output array:
|
|
1224
|
+
* var shape = [ 3, 1, 2 ];
|
|
1225
|
+
*
|
|
1226
|
+
* // Define the array strides:
|
|
1227
|
+
* var sx = [ 4, 4, 1 ];
|
|
1228
|
+
*
|
|
1229
|
+
* // Define the index offset:
|
|
1230
|
+
* var ox = 1;
|
|
1231
|
+
*
|
|
1232
|
+
* // Create the output ndarray:
|
|
1233
|
+
* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' );
|
|
1234
|
+
*
|
|
1235
|
+
* // Apply the ns.nullary function:
|
|
1236
|
+
* ns.nullary( [ x ], fcn );
|
|
1237
|
+
*
|
|
1238
|
+
* console.log( x.data );
|
|
1239
|
+
* // => <Float64Array>[ 0.0, 10.0, 10.0, 0.0, 0.0, 10.0, 10.0, 0.0, 0.0, 10.0, 10.0, 0.0 ]
|
|
1240
|
+
*/
|
|
1241
|
+
nullary: typeof nullary;
|
|
1242
|
+
|
|
1243
|
+
/**
|
|
1244
|
+
* Reorders ndarray dimensions and associated strides for loop interchange.
|
|
1245
|
+
*
|
|
1246
|
+
* ## Notes
|
|
1247
|
+
*
|
|
1248
|
+
* - The returned object has the following properties:
|
|
1249
|
+
*
|
|
1250
|
+
* - **sh**: dimensions sorted in loop order.
|
|
1251
|
+
* - **sx**: ndarray strides sorted in loop order.
|
|
1252
|
+
*
|
|
1253
|
+
* - When iterating over the elements of a multi-dimensional array, accessing elements which are closer in memory can improve performance. To this end, loop interchange is a technique used in loop nest optimization to improve locality of reference and take advantage of CPU cache.
|
|
1254
|
+
*
|
|
1255
|
+
* The purpose of this function is to order ndarray dimensions according to the magnitude of array strides. By using the ordered dimensions and associated strides, one can construct nested loops (one for each dimension) such that the innermost loop iterates over the dimension in which array elements are closest in memory and the outermost loop iterates over the dimension in which array elements are farthest apart in memory. As a consequence, element iteration is optimized to minimize cache misses and ensure locality of reference.
|
|
1256
|
+
*
|
|
1257
|
+
* @param sh - array dimensions
|
|
1258
|
+
* @param sx - array stride lengths
|
|
1259
|
+
* @returns loop interchange data
|
|
1260
|
+
*
|
|
1261
|
+
* @example
|
|
1262
|
+
* var sh = [ 2, 3, 4 ];
|
|
1263
|
+
*
|
|
1264
|
+
* var sx = [ 12, 4, 1 ]; // row-major
|
|
1265
|
+
*
|
|
1266
|
+
* var o = ns.nullaryLoopOrder( sh, sx );
|
|
1267
|
+
* // returns {...}
|
|
1268
|
+
*
|
|
1269
|
+
* var ssh = o.sh;
|
|
1270
|
+
* // returns [ 4, 3, 2 ]
|
|
1271
|
+
*
|
|
1272
|
+
* var ssx = o.sx;
|
|
1273
|
+
* // returns [ 1, 4, 12 ]
|
|
1274
|
+
*/
|
|
1275
|
+
nullaryLoopOrder: typeof nullaryLoopOrder;
|
|
1276
|
+
|
|
1277
|
+
/**
|
|
1278
|
+
* Returns a loop block size for multi-dimensional array tiled loops.
|
|
1279
|
+
*
|
|
1280
|
+
* @param dtypeX - array data type
|
|
1281
|
+
* @returns block size (in units of elements)
|
|
1282
|
+
*
|
|
1283
|
+
* @example
|
|
1284
|
+
* var bsize = ns.nullaryBlockSize( 'float64' );
|
|
1285
|
+
* // returns <number>
|
|
1286
|
+
*/
|
|
1287
|
+
nullaryBlockSize: typeof nullaryBlockSize;
|
|
1288
|
+
|
|
770
1289
|
/**
|
|
771
1290
|
* Returns the number of elements in an array.
|
|
772
1291
|
*
|
|
@@ -779,6 +1298,147 @@ interface Namespace {
|
|
|
779
1298
|
*/
|
|
780
1299
|
numel: typeof numel;
|
|
781
1300
|
|
|
1301
|
+
/**
|
|
1302
|
+
* Returns the policy string associated with an output ndarray data type policy enumeration constant.
|
|
1303
|
+
*
|
|
1304
|
+
* @param policy - policy enumeration constant
|
|
1305
|
+
* @returns policy string
|
|
1306
|
+
*
|
|
1307
|
+
* @example
|
|
1308
|
+
* var str2enum = require( `@stdlib/ndarray/base/output-policy-str2enum` );
|
|
1309
|
+
*
|
|
1310
|
+
* var v = str2enum( 'same' );
|
|
1311
|
+
* // returns <number>
|
|
1312
|
+
*
|
|
1313
|
+
* var policy = ns.outputPolicyEnum2Str( v );
|
|
1314
|
+
* // returns 'same'
|
|
1315
|
+
*/
|
|
1316
|
+
outputPolicyEnum2Str: typeof outputPolicyEnum2Str;
|
|
1317
|
+
|
|
1318
|
+
/**
|
|
1319
|
+
* Returns the enumeration constant associated with an ndarray data type policy value.
|
|
1320
|
+
*
|
|
1321
|
+
* ## Notes
|
|
1322
|
+
*
|
|
1323
|
+
* - Downstream consumers of this function should **not** rely on specific integer values (e.g., `SAME == 0`). Instead, the function should be used in an opaque manner.
|
|
1324
|
+
*
|
|
1325
|
+
* @param policy - policy value
|
|
1326
|
+
* @returns enumeration constant
|
|
1327
|
+
*
|
|
1328
|
+
* @example
|
|
1329
|
+
* var v = ns.outputPolicyResolveEnum( 'same' );
|
|
1330
|
+
* // returns <number>
|
|
1331
|
+
*/
|
|
1332
|
+
outputPolicyResolveEnum: typeof outputPolicyResolveEnum;
|
|
1333
|
+
|
|
1334
|
+
/**
|
|
1335
|
+
* Returns the policy string associated with an output ndarray data type policy value.
|
|
1336
|
+
*
|
|
1337
|
+
* @param policy - policy value
|
|
1338
|
+
* @returns policy string
|
|
1339
|
+
*
|
|
1340
|
+
* @example
|
|
1341
|
+
* var str2enum = require( `@stdlib/ndarray/base/output-policy-str2enum` );
|
|
1342
|
+
*
|
|
1343
|
+
* var v = ns.outputPolicyResolveStr( str2enum( 'same' ) );
|
|
1344
|
+
* // returns 'same'
|
|
1345
|
+
*/
|
|
1346
|
+
outputPolicyResolveStr: typeof outputPolicyResolveStr;
|
|
1347
|
+
|
|
1348
|
+
/**
|
|
1349
|
+
* Returns the enumeration constant associated with an output ndarray data type policy string.
|
|
1350
|
+
*
|
|
1351
|
+
* ## Notes
|
|
1352
|
+
*
|
|
1353
|
+
* - Downstream consumers of this function should **not** rely on specific integer values (e.g., `SAME == 0`). Instead, the function should be used in an opaque manner.
|
|
1354
|
+
*
|
|
1355
|
+
* @param policy - policy string
|
|
1356
|
+
* @returns enumeration constant
|
|
1357
|
+
*
|
|
1358
|
+
* @example
|
|
1359
|
+
* var v = ns.outputPolicyStr2Enum( 'same' );
|
|
1360
|
+
* // returns <number>
|
|
1361
|
+
*/
|
|
1362
|
+
outputPolicyStr2Enum: typeof outputPolicyStr2Enum;
|
|
1363
|
+
|
|
1364
|
+
/**
|
|
1365
|
+
* Returns an array with a specified number of prepended singleton dimensions.
|
|
1366
|
+
*
|
|
1367
|
+
* @param x - input array
|
|
1368
|
+
* @param n - number of singleton dimensions to prepend
|
|
1369
|
+
* @returns output array
|
|
1370
|
+
*
|
|
1371
|
+
* @example
|
|
1372
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
1373
|
+
*
|
|
1374
|
+
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
|
|
1375
|
+
* // returns <ndarray>
|
|
1376
|
+
*
|
|
1377
|
+
* var shx = x.shape;
|
|
1378
|
+
* // returns [ 2, 2 ]
|
|
1379
|
+
*
|
|
1380
|
+
* var y = ns.prependSingletonDimensions( x, 3 );
|
|
1381
|
+
* // returns <ndarray>
|
|
1382
|
+
*
|
|
1383
|
+
* var shy = y.shape;
|
|
1384
|
+
* // returns [ 1, 1, 1, 2, 2 ]
|
|
1385
|
+
*
|
|
1386
|
+
* var v = y.get( 0, 0, 0, 0, 0 );
|
|
1387
|
+
* // returns 1
|
|
1388
|
+
*
|
|
1389
|
+
* v = y.get( 0, 0, 0, 0, 1 );
|
|
1390
|
+
* // returns 2
|
|
1391
|
+
*
|
|
1392
|
+
* v = y.get( 0, 0, 0, 1, 0 );
|
|
1393
|
+
* // returns 3
|
|
1394
|
+
*
|
|
1395
|
+
* v = y.get( 0, 0, 0, 1, 1 );
|
|
1396
|
+
* // returns 4
|
|
1397
|
+
*/
|
|
1398
|
+
prependSingletonDimensions: typeof prependSingletonDimensions;
|
|
1399
|
+
|
|
1400
|
+
/**
|
|
1401
|
+
* Returns an array without singleton dimensions.
|
|
1402
|
+
*
|
|
1403
|
+
* ## Notes
|
|
1404
|
+
*
|
|
1405
|
+
* - If a provided ndarray does not have any singleton dimensions, the function returns the provided ndarray unchanged.
|
|
1406
|
+
* - If a provided ndarray does have singleton dimensions, the function returns a new ndarray view.
|
|
1407
|
+
*
|
|
1408
|
+
* @param x - input array
|
|
1409
|
+
* @returns squeezed array
|
|
1410
|
+
*
|
|
1411
|
+
* @example
|
|
1412
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
1413
|
+
*
|
|
1414
|
+
* var x = array( [ [ 1, 2 ], [ 3, 4 ] ], {
|
|
1415
|
+
* 'ndmin': 5
|
|
1416
|
+
* });
|
|
1417
|
+
* // returns <ndarray>
|
|
1418
|
+
*
|
|
1419
|
+
* var shx = x.shape;
|
|
1420
|
+
* // returns [ 1, 1, 1, 2, 2 ]
|
|
1421
|
+
*
|
|
1422
|
+
* var y = ns.removeSingletonDimensions( x );
|
|
1423
|
+
* // returns <ndarray>
|
|
1424
|
+
*
|
|
1425
|
+
* var shy = y.shape;
|
|
1426
|
+
* // returns [ 2, 2 ]
|
|
1427
|
+
*
|
|
1428
|
+
* var v = y.get( 0, 0 );
|
|
1429
|
+
* // returns 1
|
|
1430
|
+
*
|
|
1431
|
+
* v = y.get( 0, 1 );
|
|
1432
|
+
* // returns 2
|
|
1433
|
+
*
|
|
1434
|
+
* v = y.get( 1, 0 );
|
|
1435
|
+
* // returns 3
|
|
1436
|
+
*
|
|
1437
|
+
* v = y.get( 1, 1 );
|
|
1438
|
+
* // returns 4
|
|
1439
|
+
*/
|
|
1440
|
+
removeSingletonDimensions: typeof removeSingletonDimensions;
|
|
1441
|
+
|
|
782
1442
|
/**
|
|
783
1443
|
* Serializes ndarray meta data.
|
|
784
1444
|
*
|
|
@@ -789,7 +1449,7 @@ interface Namespace {
|
|
|
789
1449
|
* - Meta data format:
|
|
790
1450
|
*
|
|
791
1451
|
* ```text
|
|
792
|
-
* | <endianness> (1 byte) | <dtype> (2 bytes) | <ndims> (8 bytes) | <shape> (ndims*8 bytes) | <strides> (ndims*8 bytes) | <offset> (8 bytes) | <order> (1 byte) | <mode> (1 byte) | <nsubmodes> (8 bytes) | <submodes> (nsubmodes*1 bytes) |
|
|
1452
|
+
* | <endianness> (1 byte) | <dtype> (2 bytes) | <ndims> (8 bytes) | <shape> (ndims*8 bytes) | <strides> (ndims*8 bytes) | <offset> (8 bytes) | <order> (1 byte) | <mode> (1 byte) | <nsubmodes> (8 bytes) | <submodes> (nsubmodes*1 bytes) | <flags> (4 bytes) |
|
|
793
1453
|
* ```
|
|
794
1454
|
*
|
|
795
1455
|
* which translates to the following `ArrayBuffer` layout:
|
|
@@ -806,6 +1466,7 @@ interface Namespace {
|
|
|
806
1466
|
* <mode>[int8],
|
|
807
1467
|
* <nsubmodes>[int64],
|
|
808
1468
|
* <submodes>[nsubmodes*int8]
|
|
1469
|
+
* <flags>[int32]
|
|
809
1470
|
* ]
|
|
810
1471
|
* ```
|
|
811
1472
|
*
|
|
@@ -816,13 +1477,13 @@ interface Namespace {
|
|
|
816
1477
|
* - Buffer length:
|
|
817
1478
|
*
|
|
818
1479
|
* ```text
|
|
819
|
-
* 1 + 2 + 8 + (ndims*8) + (ndims*8) + 8 + 1 + 1 + 8 + (nsubmodes*1) =
|
|
1480
|
+
* 1 + 2 + 8 + (ndims*8) + (ndims*8) + 8 + 1 + 1 + 8 + (nsubmodes*1) + 4 = 33 + (ndims*16) + nsubmodes
|
|
820
1481
|
* ```
|
|
821
1482
|
*
|
|
822
1483
|
* For example, consider a three-dimensional ndarray with one subscript index mode (submode):
|
|
823
1484
|
*
|
|
824
1485
|
* ```text
|
|
825
|
-
*
|
|
1486
|
+
* 33 + (3*16) + 1 = 82 bytes
|
|
826
1487
|
* ```
|
|
827
1488
|
*
|
|
828
1489
|
* - Views:
|
|
@@ -837,6 +1498,7 @@ interface Namespace {
|
|
|
837
1498
|
* - mode: `Int8Array( buf, 20+(ndims*16), 1 )`
|
|
838
1499
|
* - nsubmodes: `Int64Array( buf, 21+(ndims*16), 1 )`
|
|
839
1500
|
* - submodes: `Int8Array( buf, 29+(ndims*16), nsubmodes )`
|
|
1501
|
+
* - flags: `Int32Array( buf, 29+(ndims*16)+nsubmodes, 1)`
|
|
840
1502
|
*
|
|
841
1503
|
* @param x - input ndarray
|
|
842
1504
|
* @returns serialized meta data
|
|
@@ -1051,6 +1713,196 @@ interface Namespace {
|
|
|
1051
1713
|
*/
|
|
1052
1714
|
ndarray2array: typeof ndarray2array;
|
|
1053
1715
|
|
|
1716
|
+
/**
|
|
1717
|
+
* Transposes a matrix (or a stack of matrices).
|
|
1718
|
+
*
|
|
1719
|
+
* @param x - input array
|
|
1720
|
+
* @returns ndarray view
|
|
1721
|
+
*
|
|
1722
|
+
* @example
|
|
1723
|
+
* var array = require( `@stdlib/ndarray/array` );
|
|
1724
|
+
*
|
|
1725
|
+
* var x = array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ], {
|
|
1726
|
+
* 'dtype': 'generic'
|
|
1727
|
+
* });
|
|
1728
|
+
* // returns <ndarray>
|
|
1729
|
+
*
|
|
1730
|
+
* var sh = x.shape;
|
|
1731
|
+
* // returns [ 2, 3 ]
|
|
1732
|
+
*
|
|
1733
|
+
* var y = ns.transpose( x );
|
|
1734
|
+
* // returns <ndarray>
|
|
1735
|
+
*
|
|
1736
|
+
* sh = y.shape;
|
|
1737
|
+
* // returns [ 3, 2 ]
|
|
1738
|
+
*
|
|
1739
|
+
* var bool = ( x.get( 0, 1 ) === y.get( 1, 0 ) );
|
|
1740
|
+
* // returns true
|
|
1741
|
+
*
|
|
1742
|
+
* bool = ( x.data === y.data );
|
|
1743
|
+
* // returns true
|
|
1744
|
+
*/
|
|
1745
|
+
transpose: typeof transpose;
|
|
1746
|
+
|
|
1747
|
+
/**
|
|
1748
|
+
* Applies a unary callback to elements in an ndarray and assigns results to elements in an ndarray.
|
|
1749
|
+
*
|
|
1750
|
+
* @param arrays - array-like object containing one input ndarray and one output ndarray
|
|
1751
|
+
* @param fcn - unary callback
|
|
1752
|
+
* @throws arrays must have the same number of dimensions
|
|
1753
|
+
* @throws arrays must have the same shape
|
|
1754
|
+
*
|
|
1755
|
+
* @example
|
|
1756
|
+
* var Float64Array = require( `@stdlib/array/float64` );
|
|
1757
|
+
* var ndarray = require( `@stdlib/ndarray/ctor` );
|
|
1758
|
+
*
|
|
1759
|
+
* function scale( x ) {
|
|
1760
|
+
* return x * 10.0;
|
|
1761
|
+
* }
|
|
1762
|
+
*
|
|
1763
|
+
* // Create data buffers:
|
|
1764
|
+
* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );
|
|
1765
|
+
* var ybuf = new Float64Array( 6 );
|
|
1766
|
+
*
|
|
1767
|
+
* // Define the shape of the input and output arrays:
|
|
1768
|
+
* var shape = [ 3, 1, 2 ];
|
|
1769
|
+
*
|
|
1770
|
+
* // Define the array strides:
|
|
1771
|
+
* var sx = [ 4, 4, 1 ];
|
|
1772
|
+
* var sy = [ 2, 2, 1 ];
|
|
1773
|
+
*
|
|
1774
|
+
* // Define the index offsets:
|
|
1775
|
+
* var ox = 1;
|
|
1776
|
+
* var oy = 0;
|
|
1777
|
+
*
|
|
1778
|
+
* // Create the input and output ndarrays:
|
|
1779
|
+
* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' );
|
|
1780
|
+
* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' );
|
|
1781
|
+
*
|
|
1782
|
+
* // Apply the ns.unary function:
|
|
1783
|
+
* ns.unary( [ x, y ], scale );
|
|
1784
|
+
*
|
|
1785
|
+
* console.log( y.data );
|
|
1786
|
+
* // => <Float64Array>[ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]
|
|
1787
|
+
*/
|
|
1788
|
+
unary: typeof unary;
|
|
1789
|
+
|
|
1790
|
+
/**
|
|
1791
|
+
* Applies a unary function to elements in an ndarray and assigns results to elements in an ndarray.
|
|
1792
|
+
*
|
|
1793
|
+
* @param arrays - array-like object containing one input ndarray and one output ndarray
|
|
1794
|
+
* @param fcn - unary function to apply to callback return values
|
|
1795
|
+
* @param clbk - callback function
|
|
1796
|
+
* @param thisArg - callback execution context
|
|
1797
|
+
* @throws arrays must have the same number of dimensions
|
|
1798
|
+
* @throws arrays must have the same shape
|
|
1799
|
+
*
|
|
1800
|
+
* @example
|
|
1801
|
+
* var identity = require( `@stdlib/math/base/special/identity` );
|
|
1802
|
+
* var Float64Array = require( `@stdlib/array/float64` );
|
|
1803
|
+
* var ndarray = require( `@stdlib/ndarray/ctor` );
|
|
1804
|
+
*
|
|
1805
|
+
* function scale( x ) {
|
|
1806
|
+
* return x * 10.0;
|
|
1807
|
+
* }
|
|
1808
|
+
*
|
|
1809
|
+
* // Create data buffers:
|
|
1810
|
+
* var xbuf = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );
|
|
1811
|
+
* var ybuf = new Float64Array( 6 );
|
|
1812
|
+
*
|
|
1813
|
+
* // Define the shape of the input and output arrays:
|
|
1814
|
+
* var shape = [ 3, 1, 2 ];
|
|
1815
|
+
*
|
|
1816
|
+
* // Define the array strides:
|
|
1817
|
+
* var sx = [ 4, 4, 1 ];
|
|
1818
|
+
* var sy = [ 2, 2, 1 ];
|
|
1819
|
+
*
|
|
1820
|
+
* // Define the index offsets:
|
|
1821
|
+
* var ox = 1;
|
|
1822
|
+
* var oy = 0;
|
|
1823
|
+
*
|
|
1824
|
+
* // Create the input and output ndarrays:
|
|
1825
|
+
* var x = ndarray( 'float64', xbuf, shape, sx, ox, 'row-major' );
|
|
1826
|
+
* var y = ndarray( 'float64', ybuf, shape, sy, oy, 'row-major' );
|
|
1827
|
+
*
|
|
1828
|
+
* // Apply the unary function:
|
|
1829
|
+
* ns.unaryBy( [ x, y ], scale, identity );
|
|
1830
|
+
*
|
|
1831
|
+
* console.log( y.data );
|
|
1832
|
+
* // => <Float64Array>[ 20.0, 30.0, 60.0, 70.0, 100.0, 110.0 ]
|
|
1833
|
+
*/
|
|
1834
|
+
unaryBy: typeof unaryBy;
|
|
1835
|
+
|
|
1836
|
+
/**
|
|
1837
|
+
* Reorders ndarray dimensions and associated strides for loop interchange.
|
|
1838
|
+
*
|
|
1839
|
+
* ## Notes
|
|
1840
|
+
*
|
|
1841
|
+
* - The returned object has the following properties:
|
|
1842
|
+
*
|
|
1843
|
+
* - **sh**: dimensions sorted in loop order.
|
|
1844
|
+
* - **sx**: input ndarray strides sorted in loop order.
|
|
1845
|
+
* - **sy**: output ndarray strides sorted in loop order.
|
|
1846
|
+
*
|
|
1847
|
+
* - When iterating over the elements of a multi-dimensional array, accessing elements which are closer in memory can improve performance. To this end, loop interchange is a technique used in loop nest optimization to improve locality of reference and take advantage of CPU cache.
|
|
1848
|
+
*
|
|
1849
|
+
* The purpose of this function is to order ndarray dimensions according to the magnitude of **input array** strides. By using the ordered dimensions and associated strides, one can construct nested loops (one for each dimension) such that the innermost loop iterates over the dimension in which array elements are closest in memory and the outermost loop iterates over the dimension in which array elements are farthest apart in memory. As a consequence, element iteration is optimized to minimize cache misses and ensure locality of reference.
|
|
1850
|
+
*
|
|
1851
|
+
* - Cache performance may be degraded if the layout order (i.e., row-major or column-major) differs for the input and output ndarrays. This function is intended to optimize cache performance for the input ndarray. If the output ndarray has a different layout order (e.g., if the input ndarray is row-major and the output ndarray is column-major), cache misses are likely for the output ndarray. In general, to ensure best performance, input and output ndarrays should have the same layout order.
|
|
1852
|
+
*
|
|
1853
|
+
* - The function assumes that the input and output ndarrays have the same shape. Hence, loop interchange order should only be determined **after** broadcasting.
|
|
1854
|
+
*
|
|
1855
|
+
* @param sh - array dimensions
|
|
1856
|
+
* @param sx - input array stride lengths
|
|
1857
|
+
* @param sy - output array stride lengths
|
|
1858
|
+
* @returns loop interchange data
|
|
1859
|
+
*
|
|
1860
|
+
* @example
|
|
1861
|
+
* var sh = [ 2, 3, 4 ];
|
|
1862
|
+
*
|
|
1863
|
+
* var sx = [ 12, 4, 1 ]; // row-major
|
|
1864
|
+
* var sy = [ 1, -2, 6 ]; // column-major
|
|
1865
|
+
*
|
|
1866
|
+
* var o = ns.unaryLoopOrder( sh, sx, sy );
|
|
1867
|
+
* // returns {...}
|
|
1868
|
+
*
|
|
1869
|
+
* var ssh = o.sh;
|
|
1870
|
+
* // returns [ 4, 3, 2 ]
|
|
1871
|
+
*
|
|
1872
|
+
* var ssx = o.sx;
|
|
1873
|
+
* // returns [ 1, 4, 12 ]
|
|
1874
|
+
*
|
|
1875
|
+
* var ssy = o.sy;
|
|
1876
|
+
* // returns [ 6, -2, 1 ]
|
|
1877
|
+
*/
|
|
1878
|
+
unaryLoopOrder: typeof unaryLoopOrder;
|
|
1879
|
+
|
|
1880
|
+
/**
|
|
1881
|
+
* Resolves the output ndarray data type for a unary function.
|
|
1882
|
+
*
|
|
1883
|
+
* @param dtype - input ndarray data type
|
|
1884
|
+
* @param policy - output ndarray data type policy
|
|
1885
|
+
* @returns output ndarray data type
|
|
1886
|
+
*
|
|
1887
|
+
* @example
|
|
1888
|
+
* var dt = ns.unaryOutputDataType( 'float64', 'complex_floating_point' );
|
|
1889
|
+
* // returns <string>
|
|
1890
|
+
*/
|
|
1891
|
+
unaryOutputDataType: typeof unaryOutputDataType;
|
|
1892
|
+
|
|
1893
|
+
/**
|
|
1894
|
+
* Returns a loop block size for multi-dimensional array tiled loops.
|
|
1895
|
+
*
|
|
1896
|
+
* @param dtypeX - input array data type
|
|
1897
|
+
* @param dtypeY - output array data type
|
|
1898
|
+
* @returns block size (in units of elements)
|
|
1899
|
+
*
|
|
1900
|
+
* @example
|
|
1901
|
+
* var bsize = ns.unaryBlockSize( 'float64', 'float64' );
|
|
1902
|
+
* // returns <number>
|
|
1903
|
+
*/
|
|
1904
|
+
unaryBlockSize: typeof unaryBlockSize;
|
|
1905
|
+
|
|
1054
1906
|
/**
|
|
1055
1907
|
* Converts a linear index in an array view to a linear index in an underlying data buffer.
|
|
1056
1908
|
*
|
|
@@ -1093,6 +1945,55 @@ interface Namespace {
|
|
|
1093
1945
|
* // returns 6
|
|
1094
1946
|
*/
|
|
1095
1947
|
wrapIndex: typeof wrapIndex;
|
|
1948
|
+
|
|
1949
|
+
/**
|
|
1950
|
+
* Creates a zero-filled array having a specified shape and data type.
|
|
1951
|
+
*
|
|
1952
|
+
* @param dtype - underlying data type
|
|
1953
|
+
* @param shape - array shape
|
|
1954
|
+
* @param order - specifies whether an array is row-major (C-style) or column-major (Fortran-style)
|
|
1955
|
+
* @returns zero-filled array
|
|
1956
|
+
*
|
|
1957
|
+
* @example
|
|
1958
|
+
* var arr = ns.zeros( 'float32', [ 2, 2 ], 'row-major' );
|
|
1959
|
+
* // returns <ndarray>
|
|
1960
|
+
*
|
|
1961
|
+
* var sh = arr.shape;
|
|
1962
|
+
* // returns [ 2, 2 ]
|
|
1963
|
+
*
|
|
1964
|
+
* var dt = arr.dtype;
|
|
1965
|
+
* // returns 'float32'
|
|
1966
|
+
*/
|
|
1967
|
+
zeros: typeof zeros;
|
|
1968
|
+
|
|
1969
|
+
/**
|
|
1970
|
+
* Creates a zero-filled array having the same shape and data type as a provided input ndarray.
|
|
1971
|
+
*
|
|
1972
|
+
* @param x - input array
|
|
1973
|
+
* @returns zero-filled array
|
|
1974
|
+
*
|
|
1975
|
+
* @example
|
|
1976
|
+
* var zeros = require( `@stdlib/ndarray/base/zeros` );
|
|
1977
|
+
*
|
|
1978
|
+
* var x = zeros( 'generic', [ 2, 2 ], 'row-major' );
|
|
1979
|
+
* // returns <ndarray>
|
|
1980
|
+
*
|
|
1981
|
+
* var sh = x.shape;
|
|
1982
|
+
* // returns [ 2, 2 ]
|
|
1983
|
+
*
|
|
1984
|
+
* var dt = x.dtype;
|
|
1985
|
+
* // returns 'generic'
|
|
1986
|
+
*
|
|
1987
|
+
* var y = ns.zerosLike( x );
|
|
1988
|
+
* // returns <ndarray>
|
|
1989
|
+
*
|
|
1990
|
+
* sh = y.shape;
|
|
1991
|
+
* // returns [ 2, 2 ]
|
|
1992
|
+
*
|
|
1993
|
+
* dt = y.dtype;
|
|
1994
|
+
* // returns 'generic'
|
|
1995
|
+
*/
|
|
1996
|
+
zerosLike: typeof zerosLike;
|
|
1096
1997
|
}
|
|
1097
1998
|
|
|
1098
1999
|
/**
|