@@ -287,7 +287,7 @@ where
287
287
/// print(&a);
288
288
/// print(&row(&a, 4));
289
289
/// ```
290
- pub fn row < T > ( input : & Array < T > , row_num : u64 ) -> Array < T >
290
+ pub fn row < T > ( input : & Array < T > , row_num : i64 ) -> Array < T >
291
291
where
292
292
T : HasAfEnum ,
293
293
{
@@ -301,7 +301,7 @@ where
301
301
}
302
302
303
303
/// Set `row_num`^th row in `inout` Array to a new Array `new_row`
304
- pub fn set_row < T > ( inout : & mut Array < T > , new_row : & Array < T > , row_num : u64 )
304
+ pub fn set_row < T > ( inout : & mut Array < T > , new_row : & Array < T > , row_num : i64 )
305
305
where
306
306
T : HasAfEnum ,
307
307
{
@@ -313,22 +313,24 @@ where
313
313
}
314
314
315
315
/// Get an Array with all rows from `first` to `last` in the `input` Array
316
- pub fn rows < T > ( input : & Array < T > , first : u64 , last : u64 ) -> Array < T >
316
+ pub fn rows < T > ( input : & Array < T > , first : i64 , last : i64 ) -> Array < T >
317
317
where
318
318
T : HasAfEnum ,
319
319
{
320
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
320
321
index (
321
322
input,
322
- & [ Seq :: new ( first as f64 , last as f64 , 1.0 ) , Seq :: default ( ) ] ,
323
+ & [ Seq :: new ( first as f64 , last as f64 , step ) , Seq :: default ( ) ] ,
323
324
)
324
325
}
325
326
326
327
/// Set rows from `first` to `last` in `inout` Array with rows from Array `new_rows`
327
- pub fn set_rows < T > ( inout : & mut Array < T > , new_rows : & Array < T > , first : u64 , last : u64 )
328
+ pub fn set_rows < T > ( inout : & mut Array < T > , new_rows : & Array < T > , first : i64 , last : i64 )
328
329
where
329
330
T : HasAfEnum ,
330
331
{
331
- let seqs = [ Seq :: new ( first as f64 , last as f64 , 1.0 ) , Seq :: default ( ) ] ;
332
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
333
+ let seqs = [ Seq :: new ( first as f64 , last as f64 , step) , Seq :: default ( ) ] ;
332
334
assign_seq ( inout, & seqs, new_rows)
333
335
}
334
336
@@ -344,7 +346,7 @@ where
344
346
/// println!("Grab last col of the random matrix");
345
347
/// print(&col(&a, 4));
346
348
/// ```
347
- pub fn col < T > ( input : & Array < T > , col_num : u64 ) -> Array < T >
349
+ pub fn col < T > ( input : & Array < T > , col_num : i64 ) -> Array < T >
348
350
where
349
351
T : HasAfEnum ,
350
352
{
@@ -358,7 +360,7 @@ where
358
360
}
359
361
360
362
/// Set `col_num`^th col in `inout` Array to a new Array `new_col`
361
- pub fn set_col < T > ( inout : & mut Array < T > , new_col : & Array < T > , col_num : u64 )
363
+ pub fn set_col < T > ( inout : & mut Array < T > , new_col : & Array < T > , col_num : i64 )
362
364
where
363
365
T : HasAfEnum ,
364
366
{
@@ -370,29 +372,31 @@ where
370
372
}
371
373
372
374
/// Get all cols from `first` to `last` in the `input` Array
373
- pub fn cols < T > ( input : & Array < T > , first : u64 , last : u64 ) -> Array < T >
375
+ pub fn cols < T > ( input : & Array < T > , first : i64 , last : i64 ) -> Array < T >
374
376
where
375
377
T : HasAfEnum ,
376
378
{
379
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
377
380
index (
378
381
input,
379
- & [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , 1.0 ) ] ,
382
+ & [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , step ) ] ,
380
383
)
381
384
}
382
385
383
386
/// Set cols from `first` to `last` in `inout` Array with cols from Array `new_cols`
384
- pub fn set_cols < T > ( inout : & mut Array < T > , new_cols : & Array < T > , first : u64 , last : u64 )
387
+ pub fn set_cols < T > ( inout : & mut Array < T > , new_cols : & Array < T > , first : i64 , last : i64 )
385
388
where
386
389
T : HasAfEnum ,
387
390
{
388
- let seqs = [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , 1.0 ) ] ;
391
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
392
+ let seqs = [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , step) ] ;
389
393
assign_seq ( inout, & seqs, new_cols)
390
394
}
391
395
392
396
/// Get `slice_num`^th slice from `input` Array
393
397
///
394
398
/// Slices indicate that the indexing is along 3rd dimension
395
- pub fn slice < T > ( input : & Array < T > , slice_num : u64 ) -> Array < T >
399
+ pub fn slice < T > ( input : & Array < T > , slice_num : i64 ) -> Array < T >
396
400
where
397
401
T : HasAfEnum ,
398
402
{
@@ -407,7 +411,7 @@ where
407
411
/// Set slice `slice_num` in `inout` Array to a new Array `new_slice`
408
412
///
409
413
/// Slices indicate that the indexing is along 3rd dimension
410
- pub fn set_slice < T > ( inout : & mut Array < T > , new_slice : & Array < T > , slice_num : u64 )
414
+ pub fn set_slice < T > ( inout : & mut Array < T > , new_slice : & Array < T > , slice_num : i64 )
411
415
where
412
416
T : HasAfEnum ,
413
417
{
@@ -422,29 +426,31 @@ where
422
426
/// Get slices from `first` to `last` in `input` Array
423
427
///
424
428
/// Slices indicate that the indexing is along 3rd dimension
425
- pub fn slices < T > ( input : & Array < T > , first : u64 , last : u64 ) -> Array < T >
429
+ pub fn slices < T > ( input : & Array < T > , first : i64 , last : i64 ) -> Array < T >
426
430
where
427
431
T : HasAfEnum ,
428
432
{
433
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
429
434
let seqs = [
430
435
Seq :: default ( ) ,
431
436
Seq :: default ( ) ,
432
- Seq :: new ( first as f64 , last as f64 , 1.0 ) ,
437
+ Seq :: new ( first as f64 , last as f64 , step ) ,
433
438
] ;
434
439
index ( input, & seqs)
435
440
}
436
441
437
442
/// Set `first` to `last` slices of `inout` Array to a new Array `new_slices`
438
443
///
439
444
/// Slices indicate that the indexing is along 3rd dimension
440
- pub fn set_slices < T > ( inout : & mut Array < T > , new_slices : & Array < T > , first : u64 , last : u64 )
445
+ pub fn set_slices < T > ( inout : & mut Array < T > , new_slices : & Array < T > , first : i64 , last : i64 )
441
446
where
442
447
T : HasAfEnum ,
443
448
{
449
+ let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
444
450
let seqs = [
445
451
Seq :: default ( ) ,
446
452
Seq :: default ( ) ,
447
- Seq :: new ( first as f64 , last as f64 , 1.0 ) ,
453
+ Seq :: new ( first as f64 , last as f64 , step ) ,
448
454
] ;
449
455
assign_seq ( inout, & seqs, new_slices)
450
456
}
@@ -644,6 +650,7 @@ mod tests {
644
650
use super :: super :: data:: constant;
645
651
use super :: super :: dim4:: Dim4 ;
646
652
use super :: super :: index:: { assign_gen, assign_seq, col, index, index_gen, row, Indexer } ;
653
+ use super :: super :: index:: { cols, rows} ;
647
654
use super :: super :: random:: randu;
648
655
use super :: super :: seq:: Seq ;
649
656
@@ -800,4 +807,51 @@ mod tests {
800
807
// 0.7896
801
808
// ANCHOR_END: setrow
802
809
}
810
+
811
+ #[ test]
812
+ fn get_row ( ) {
813
+ // ANCHOR: get_row
814
+ let a = randu :: < f32 > ( dim4 ! ( 5 , 5 ) ) ;
815
+ // [5 5 1 1]
816
+ // 0.6010 0.5497 0.1583 0.3636 0.6755
817
+ // 0.0278 0.2864 0.3712 0.4165 0.6105
818
+ // 0.9806 0.3410 0.3543 0.5814 0.5232
819
+ // 0.2126 0.7509 0.6450 0.8962 0.5567
820
+ // 0.0655 0.4105 0.9675 0.3712 0.7896
821
+ let _r = row ( & a, -1 ) ;
822
+ // [1 5 1 1]
823
+ // 0.0655 0.4105 0.9675 0.3712 0.7896
824
+ let _c = col ( & a, -1 ) ;
825
+ // [5 1 1 1]
826
+ // 0.6755
827
+ // 0.6105
828
+ // 0.5232
829
+ // 0.5567
830
+ // 0.7896
831
+ // ANCHOR_END: get_row
832
+ }
833
+
834
+ #[ test]
835
+ fn get_rows ( ) {
836
+ // ANCHOR: get_rows
837
+ let a = randu :: < f32 > ( dim4 ! ( 5 , 5 ) ) ;
838
+ // [5 5 1 1]
839
+ // 0.6010 0.5497 0.1583 0.3636 0.6755
840
+ // 0.0278 0.2864 0.3712 0.4165 0.6105
841
+ // 0.9806 0.3410 0.3543 0.5814 0.5232
842
+ // 0.2126 0.7509 0.6450 0.8962 0.5567
843
+ // 0.0655 0.4105 0.9675 0.3712 0.7896
844
+ let _r = rows ( & a, -1 , -2 ) ;
845
+ // [2 5 1 1]
846
+ // 0.2126 0.7509 0.6450 0.8962 0.5567
847
+ // 0.0655 0.4105 0.9675 0.3712 0.7896
848
+ let _c = cols ( & a, -1 , -3 ) ;
849
+ // [5 3 1 1]
850
+ // 0.1583 0.3636 0.6755
851
+ // 0.3712 0.4165 0.6105
852
+ // 0.3543 0.5814 0.5232
853
+ // 0.6450 0.8962 0.5567
854
+ // 0.9675 0.3712 0.7896
855
+ // ANCHOR_END: get_rows
856
+ }
803
857
}
0 commit comments