@@ -293,13 +293,11 @@ pub fn row<T>(input: &Array<T>, row_num: i64) -> Array<T>
293
293
where
294
294
T : HasAfEnum ,
295
295
{
296
- index (
297
- input,
298
- & [
299
- Seq :: new ( row_num as f64 , row_num as f64 , 1.0 ) ,
300
- Seq :: default ( ) ,
301
- ] ,
302
- )
296
+ let mut seqs = vec ! [ Seq :: new( row_num as f64 , row_num as f64 , 1.0 ) ] ;
297
+ for _d in 1 ..input. dims ( ) . ndims ( ) {
298
+ seqs. push ( Seq :: default ( ) ) ;
299
+ }
300
+ index ( input, & seqs)
303
301
}
304
302
305
303
/// Set `row_num`^th row in `inout` Array to a new Array `new_row`
@@ -308,7 +306,7 @@ where
308
306
T : HasAfEnum ,
309
307
{
310
308
let mut seqs = vec ! [ Seq :: new( row_num as f64 , row_num as f64 , 1.0 ) ] ;
311
- if inout. dims ( ) . ndims ( ) > 1 {
309
+ for _d in 1 .. inout. dims ( ) . ndims ( ) {
312
310
seqs. push ( Seq :: default ( ) ) ;
313
311
}
314
312
assign_seq ( inout, & seqs, new_row)
@@ -320,10 +318,11 @@ where
320
318
T : HasAfEnum ,
321
319
{
322
320
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
323
- index (
324
- input,
325
- & [ Seq :: new ( first as f64 , last as f64 , step) , Seq :: default ( ) ] ,
326
- )
321
+ let mut seqs = vec ! [ Seq :: new( first as f64 , last as f64 , step) ] ;
322
+ for _d in 1 ..input. dims ( ) . ndims ( ) {
323
+ seqs. push ( Seq :: default ( ) ) ;
324
+ }
325
+ index ( input, & seqs)
327
326
}
328
327
329
328
/// Set rows from `first` to `last` in `inout` Array with rows from Array `new_rows`
@@ -332,7 +331,10 @@ where
332
331
T : HasAfEnum ,
333
332
{
334
333
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
335
- let seqs = [ Seq :: new ( first as f64 , last as f64 , step) , Seq :: default ( ) ] ;
334
+ let mut seqs = vec ! [ Seq :: new( first as f64 , last as f64 , step) ] ;
335
+ for _d in 1 ..inout. dims ( ) . ndims ( ) {
336
+ seqs. push ( Seq :: default ( ) ) ;
337
+ }
336
338
assign_seq ( inout, & seqs, new_rows)
337
339
}
338
340
@@ -352,24 +354,28 @@ pub fn col<T>(input: &Array<T>, col_num: i64) -> Array<T>
352
354
where
353
355
T : HasAfEnum ,
354
356
{
355
- index (
356
- input,
357
- & [
358
- Seq :: default ( ) ,
359
- Seq :: new ( col_num as f64 , col_num as f64 , 1.0 ) ,
360
- ] ,
361
- )
357
+ let mut seqs = vec ! [
358
+ Seq :: default ( ) ,
359
+ Seq :: new( col_num as f64 , col_num as f64 , 1.0 ) ,
360
+ ] ;
361
+ for _d in 2 ..input. dims ( ) . ndims ( ) {
362
+ seqs. push ( Seq :: default ( ) ) ;
363
+ }
364
+ index ( input, & seqs)
362
365
}
363
366
364
367
/// Set `col_num`^th col in `inout` Array to a new Array `new_col`
365
368
pub fn set_col < T > ( inout : & mut Array < T > , new_col : & Array < T > , col_num : i64 )
366
369
where
367
370
T : HasAfEnum ,
368
371
{
369
- let seqs = [
372
+ let mut seqs = vec ! [
370
373
Seq :: default ( ) ,
371
374
Seq :: new( col_num as f64 , col_num as f64 , 1.0 ) ,
372
375
] ;
376
+ for _d in 2 ..inout. dims ( ) . ndims ( ) {
377
+ seqs. push ( Seq :: default ( ) ) ;
378
+ }
373
379
assign_seq ( inout, & seqs, new_col)
374
380
}
375
381
@@ -379,10 +385,11 @@ where
379
385
T : HasAfEnum ,
380
386
{
381
387
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
382
- index (
383
- input,
384
- & [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , step) ] ,
385
- )
388
+ let mut seqs = vec ! [ Seq :: default ( ) , Seq :: new( first as f64 , last as f64 , step) ] ;
389
+ for _d in 2 ..input. dims ( ) . ndims ( ) {
390
+ seqs. push ( Seq :: default ( ) ) ;
391
+ }
392
+ index ( input, & seqs)
386
393
}
387
394
388
395
/// Set cols from `first` to `last` in `inout` Array with cols from Array `new_cols`
@@ -391,7 +398,10 @@ where
391
398
T : HasAfEnum ,
392
399
{
393
400
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
394
- let seqs = [ Seq :: default ( ) , Seq :: new ( first as f64 , last as f64 , step) ] ;
401
+ let mut seqs = vec ! [ Seq :: default ( ) , Seq :: new( first as f64 , last as f64 , step) ] ;
402
+ for _d in 2 ..inout. dims ( ) . ndims ( ) {
403
+ seqs. push ( Seq :: default ( ) ) ;
404
+ }
395
405
assign_seq ( inout, & seqs, new_cols)
396
406
}
397
407
@@ -402,11 +412,14 @@ pub fn slice<T>(input: &Array<T>, slice_num: i64) -> Array<T>
402
412
where
403
413
T : HasAfEnum ,
404
414
{
405
- let seqs = [
415
+ let mut seqs = vec ! [
406
416
Seq :: default ( ) ,
407
417
Seq :: default ( ) ,
408
418
Seq :: new( slice_num as f64 , slice_num as f64 , 1.0 ) ,
409
419
] ;
420
+ for _d in 3 ..input. dims ( ) . ndims ( ) {
421
+ seqs. push ( Seq :: default ( ) ) ;
422
+ }
410
423
index ( input, & seqs)
411
424
}
412
425
@@ -417,11 +430,14 @@ pub fn set_slice<T>(inout: &mut Array<T>, new_slice: &Array<T>, slice_num: i64)
417
430
where
418
431
T : HasAfEnum ,
419
432
{
420
- let seqs = [
433
+ let mut seqs = vec ! [
421
434
Seq :: default ( ) ,
422
435
Seq :: default ( ) ,
423
436
Seq :: new( slice_num as f64 , slice_num as f64 , 1.0 ) ,
424
437
] ;
438
+ for _d in 3 ..inout. dims ( ) . ndims ( ) {
439
+ seqs. push ( Seq :: default ( ) ) ;
440
+ }
425
441
assign_seq ( inout, & seqs, new_slice)
426
442
}
427
443
@@ -433,11 +449,14 @@ where
433
449
T : HasAfEnum ,
434
450
{
435
451
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
436
- let seqs = [
452
+ let mut seqs = vec ! [
437
453
Seq :: default ( ) ,
438
454
Seq :: default ( ) ,
439
455
Seq :: new( first as f64 , last as f64 , step) ,
440
456
] ;
457
+ for _d in 3 ..input. dims ( ) . ndims ( ) {
458
+ seqs. push ( Seq :: default ( ) ) ;
459
+ }
441
460
index ( input, & seqs)
442
461
}
443
462
@@ -449,11 +468,14 @@ where
449
468
T : HasAfEnum ,
450
469
{
451
470
let step: f64 = if first > last && last < 0 { -1.0 } else { 1.0 } ;
452
- let seqs = [
471
+ let mut seqs = vec ! [
453
472
Seq :: default ( ) ,
454
473
Seq :: default ( ) ,
455
474
Seq :: new( first as f64 , last as f64 , step) ,
456
475
] ;
476
+ for _d in 3 ..inout. dims ( ) . ndims ( ) {
477
+ seqs. push ( Seq :: default ( ) ) ;
478
+ }
457
479
assign_seq ( inout, & seqs, new_slices)
458
480
}
459
481
@@ -655,7 +677,7 @@ mod tests {
655
677
use super :: super :: device:: set_device;
656
678
use super :: super :: dim4:: Dim4 ;
657
679
use super :: super :: index:: { assign_gen, assign_seq, col, index, index_gen, row, Indexer } ;
658
- use super :: super :: index:: { cols, rows} ;
680
+ use super :: super :: index:: { cols, rows, set_row , set_rows } ;
659
681
use super :: super :: random:: randu;
660
682
use super :: super :: seq:: Seq ;
661
683
@@ -868,4 +890,44 @@ mod tests {
868
890
// 0.9675 0.3712 0.7896
869
891
// ANCHOR_END: get_rows
870
892
}
893
+
894
+ #[ test]
895
+ fn change_row ( ) {
896
+ set_device ( 0 ) ;
897
+
898
+ let v0: Vec < bool > = vec ! [ true , true , true , true , true , true ] ;
899
+ let mut a0 = Array :: new ( & v0, dim4 ! ( v0. len( ) as u64 ) ) ;
900
+
901
+ let v1: Vec < bool > = vec ! [ false ] ;
902
+ let a1 = Array :: new ( & v1, dim4 ! ( v1. len( ) as u64 ) ) ;
903
+
904
+ set_row ( & mut a0, & a1, 2 ) ;
905
+
906
+ let mut res = vec ! [ true ; a0. elements( ) ] ;
907
+ a0. host ( & mut res) ;
908
+
909
+ let gold = vec ! [ true , true , false , true , true , true ] ;
910
+
911
+ assert_eq ! ( gold, res) ;
912
+ }
913
+
914
+ #[ test]
915
+ fn change_rows ( ) {
916
+ set_device ( 0 ) ;
917
+
918
+ let v0: Vec < bool > = vec ! [ true , true , true , true , true , true ] ;
919
+ let mut a0 = Array :: new ( & v0, dim4 ! ( v0. len( ) as u64 ) ) ;
920
+
921
+ let v1: Vec < bool > = vec ! [ false , false ] ;
922
+ let a1 = Array :: new ( & v1, dim4 ! ( v1. len( ) as u64 ) ) ;
923
+
924
+ set_rows ( & mut a0, & a1, 2 , 3 ) ;
925
+
926
+ let mut res = vec ! [ true ; a0. elements( ) ] ;
927
+ a0. host ( & mut res) ;
928
+
929
+ let gold = vec ! [ true , true , false , false , true , true ] ;
930
+
931
+ assert_eq ! ( gold, res) ;
932
+ }
871
933
}
0 commit comments