Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 17x 4x 4x 4x 4x 4x 8x 8x 8x 8x 8x 4x 4x 13x 13x 13x 13x 17x 24x 24x 24x 77x 77x 24x 24x 53x 53x 24x 13x 17x 3x 3x 3x 3x 3x | /**
* @license Apache-2.0
*
* Copyright (c) 2025 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
// MODULES //
var indicesComplement = require( '@stdlib/array/base/indices-complement' );
var getShape = require( '@stdlib/ndarray/base/shape' );
var getDType = require( '@stdlib/ndarray/base/dtype' );
var getOrder = require( '@stdlib/ndarray/base/order' );
var getData = require( '@stdlib/ndarray/base/data-buffer' );
var ndarray = require( '@stdlib/ndarray/base/ctor' );
var assign = require( '@stdlib/ndarray/base/assign' );
var nditerStacks = require( '@stdlib/ndarray/iter/stacks' );
// MAIN //
/**
* Concatenates a list of ndarrays along a specified ndarray dimension.
*
* @private
* @param {ArrayLikeObject<ndarrayLike>} arrays - array-like object containing input ndarrays
* @param {NegativeInteger} dim - dimension along which to concatenate input ndarrays
* @param {ndarray} out - output ndarray
* @returns {ndarray} output ndarray
*/
function concat( arrays, dim, out ) {
var istacks;
var ostacks;
var offset;
var buf;
var ord;
var sh;
var dt;
var s;
var i;
var v;
// Resolve the output ndarray shape:
sh = getShape( out, false );
// When concatenating one-dimensional ndarrays, opt for a faster path in which we write to output ndarray segments directly...
if ( sh.length === 1 ) {
dt = getDType( out );
buf = getData( out );
ord = getOrder( out );
offset = 0;
for ( i = 0; i < arrays.length; i++ ) {
sh = getShape( arrays[ i ], false );
v = new ndarray( dt, buf, sh, [ 1 ], offset, ord );
assign( [ arrays[ i ], v ] );
offset += sh[ 0 ];
}
return out;
}
// Create iterator for iterating over subarray views within the output ndarray:
ostacks = nditerStacks( out, indicesComplement( sh.length, [ dim ] ) );
// Assign each input ndarray subarray to a corresponding output subarray view...
for ( i = 0; i < arrays.length; i++ ) {
sh = getShape( arrays[ i ], false );
istacks = nditerStacks( arrays[ i ], indicesComplement( sh.length, [ dim ] ) ); // eslint-disable-line max-len
while ( true ) {
s = istacks.next();
if ( s.done ) {
break;
}
assign( [ s.value, ostacks.next().value ] );
}
}
return out;
}
// EXPORTS //
module.exports = concat;
|