numo-narray 0.9.1.4 → 0.9.1.5
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.
- checksums.yaml +4 -4
- data/README.md +10 -4
- data/ext/numo/narray/array.c +17 -7
- data/ext/numo/narray/data.c +39 -36
- data/ext/numo/narray/extconf.rb +1 -0
- data/ext/numo/narray/gen/narray_def.rb +4 -0
- data/ext/numo/narray/gen/spec.rb +5 -1
- data/ext/numo/narray/gen/tmpl/accum.c +2 -2
- data/ext/numo/narray/gen/tmpl/accum_arg.c +88 -0
- data/ext/numo/narray/gen/tmpl/accum_binary.c +1 -1
- data/ext/numo/narray/gen/tmpl/accum_index.c +25 -14
- data/ext/numo/narray/gen/tmpl/aref.c +5 -35
- data/ext/numo/narray/gen/tmpl/aset.c +7 -37
- data/ext/numo/narray/gen/tmpl/bincount.c +7 -7
- data/ext/numo/narray/gen/tmpl/clip.c +11 -15
- data/ext/numo/narray/gen/tmpl/cum.c +1 -1
- data/ext/numo/narray/gen/tmpl/each.c +4 -2
- data/ext/numo/narray/gen/tmpl/each_with_index.c +5 -2
- data/ext/numo/narray/gen/tmpl/lib.c +2 -2
- data/ext/numo/narray/gen/tmpl/logseq.c +6 -5
- data/ext/numo/narray/gen/tmpl/map_with_index.c +5 -6
- data/ext/numo/narray/gen/tmpl/median.c +2 -2
- data/ext/numo/narray/gen/tmpl/minmax.c +1 -1
- data/ext/numo/narray/gen/tmpl/poly.c +4 -4
- data/ext/numo/narray/gen/tmpl/qsort.c +1 -1
- data/ext/numo/narray/gen/tmpl/rand.c +8 -6
- data/ext/numo/narray/gen/tmpl/rand_norm.c +18 -16
- data/ext/numo/narray/gen/tmpl/seq.c +5 -4
- data/ext/numo/narray/gen/tmpl/sort.c +3 -3
- data/ext/numo/narray/gen/tmpl/sort_index.c +2 -2
- data/ext/numo/narray/gen/tmpl/store_array.c +14 -2
- data/ext/numo/narray/gen/tmpl/unary_s.c +55 -31
- data/ext/numo/narray/gen/tmpl_bit/aref.c +22 -30
- data/ext/numo/narray/gen/tmpl_bit/aset.c +20 -34
- data/ext/numo/narray/gen/tmpl_bit/binary.c +42 -14
- data/ext/numo/narray/gen/tmpl_bit/bit_count.c +5 -0
- data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +5 -0
- data/ext/numo/narray/gen/tmpl_bit/store_array.c +14 -2
- data/ext/numo/narray/gen/tmpl_bit/store_bit.c +21 -7
- data/ext/numo/narray/gen/tmpl_bit/unary.c +21 -7
- data/ext/numo/narray/index.c +369 -59
- data/ext/numo/narray/math.c +2 -2
- data/ext/numo/narray/narray.c +45 -27
- data/ext/numo/narray/ndloop.c +2 -2
- data/ext/numo/narray/numo/intern.h +3 -2
- data/ext/numo/narray/numo/narray.h +24 -5
- data/ext/numo/narray/numo/ndloop.h +2 -2
- data/ext/numo/narray/numo/template.h +4 -6
- data/ext/numo/narray/numo/types/complex.h +2 -2
- data/ext/numo/narray/step.c +58 -252
- data/ext/numo/narray/struct.c +2 -2
- data/lib/numo/narray/extra.rb +172 -212
- data/numo-narray.gemspec +9 -5
- metadata +18 -17
data/ext/numo/narray/struct.c
CHANGED
data/lib/numo/narray/extra.rb
CHANGED
@@ -43,75 +43,25 @@ module Numo
|
|
43
43
|
reverse(0)
|
44
44
|
end
|
45
45
|
|
46
|
-
# Multi-dimensional array indexing.
|
47
|
-
# Same as [] for one-dimensional NArray.
|
48
|
-
# Similar to numpy's tuple indexing, i.e., `a[[1,2,..],[3,4,..]]`
|
49
|
-
# (This method will be rewritten in C)
|
50
|
-
# @return [Numo::NArray] one-dimensional view of self.
|
51
|
-
# @example
|
52
|
-
# p x = Numo::DFloat.new(3,3,3).seq
|
53
|
-
# # Numo::DFloat#shape=[3,3,3]
|
54
|
-
# # [[[0, 1, 2],
|
55
|
-
# # [3, 4, 5],
|
56
|
-
# # [6, 7, 8]],
|
57
|
-
# # [[9, 10, 11],
|
58
|
-
# # [12, 13, 14],
|
59
|
-
# # [15, 16, 17]],
|
60
|
-
# # [[18, 19, 20],
|
61
|
-
# # [21, 22, 23],
|
62
|
-
# # [24, 25, 26]]]
|
63
|
-
#
|
64
|
-
# p x.at([0,1,2],[0,1,2],[-1,-2,-3])
|
65
|
-
# # Numo::DFloat(view)#shape=[3]
|
66
|
-
# # [2, 13, 24]
|
67
|
-
def at(*indices)
|
68
|
-
if indices.size != ndim
|
69
|
-
raise DimensionError, "argument length does not match dimension size"
|
70
|
-
end
|
71
|
-
idx = nil
|
72
|
-
stride = 1
|
73
|
-
(indices.size-1).downto(0) do |i|
|
74
|
-
ix = Int64.cast(indices[i])
|
75
|
-
if ix.ndim != 1
|
76
|
-
raise DimensionError, "index array is not one-dimensional"
|
77
|
-
end
|
78
|
-
ix[ix < 0] += shape[i]
|
79
|
-
if ((ix < 0) & (ix >= shape[i])).any?
|
80
|
-
raise IndexError, "index array is out of range"
|
81
|
-
end
|
82
|
-
if idx
|
83
|
-
if idx.size != ix.size
|
84
|
-
raise ShapeError, "index array sizes mismatch"
|
85
|
-
end
|
86
|
-
idx += ix * stride
|
87
|
-
stride *= shape[i]
|
88
|
-
else
|
89
|
-
idx = ix
|
90
|
-
stride = shape[i]
|
91
|
-
end
|
92
|
-
end
|
93
|
-
self[idx]
|
94
|
-
end
|
95
|
-
|
96
46
|
# Rotate in the plane specified by axes.
|
97
47
|
# @example
|
98
|
-
#
|
99
|
-
# # Numo::Int32#shape=[2,2]
|
48
|
+
# a = Numo::Int32.new(2,2).seq
|
49
|
+
# # => Numo::Int32#shape=[2,2]
|
100
50
|
# # [[0, 1],
|
101
51
|
# # [2, 3]]
|
102
52
|
#
|
103
|
-
#
|
104
|
-
# # Numo::Int32(view)#shape=[2,2]
|
53
|
+
# a.rot90
|
54
|
+
# # => Numo::Int32(view)#shape=[2,2]
|
105
55
|
# # [[1, 3],
|
106
56
|
# # [0, 2]]
|
107
57
|
#
|
108
|
-
#
|
109
|
-
# # Numo::Int32(view)#shape=[2,2]
|
58
|
+
# a.rot90(2)
|
59
|
+
# # => Numo::Int32(view)#shape=[2,2]
|
110
60
|
# # [[3, 2],
|
111
61
|
# # [1, 0]]
|
112
62
|
#
|
113
|
-
#
|
114
|
-
# # Numo::Int32(view)#shape=[2,2]
|
63
|
+
# a.rot90(3)
|
64
|
+
# # => Numo::Int32(view)#shape=[2,2]
|
115
65
|
# # [[2, 0],
|
116
66
|
# # [3, 1]]
|
117
67
|
def rot90(k=1,axes=[0,1])
|
@@ -177,10 +127,10 @@ module Numo
|
|
177
127
|
# 4 9 7
|
178
128
|
# 2 -1 6
|
179
129
|
# ]
|
180
|
-
# => Numo::DFloat#shape=[3,3]
|
181
|
-
# [[2, -3, 5],
|
182
|
-
#
|
183
|
-
#
|
130
|
+
# # => Numo::DFloat#shape=[3,3]
|
131
|
+
# # [[2, -3, 5],
|
132
|
+
# # [4, 9, 7],
|
133
|
+
# # [2, -1, 6]]
|
184
134
|
|
185
135
|
def self.parse(str, split1d:/\s+/, split2d:/;?$|;/,
|
186
136
|
split3d:/\s*\n(\s*\n)+/m)
|
@@ -210,7 +160,7 @@ module Numo
|
|
210
160
|
|
211
161
|
|
212
162
|
# Iterate over an axis
|
213
|
-
# @
|
163
|
+
# @example
|
214
164
|
# > a = Numo::DFloat.new(2,2,2).seq
|
215
165
|
# > p a
|
216
166
|
# Numo::DFloat#shape=[2,2,2]
|
@@ -260,19 +210,19 @@ module Numo
|
|
260
210
|
# Append values to the end of an narray.
|
261
211
|
# @example
|
262
212
|
# a = Numo::DFloat[1, 2, 3]
|
263
|
-
#
|
264
|
-
# # Numo::DFloat#shape=[9]
|
213
|
+
# a.append([[4, 5, 6], [7, 8, 9]])
|
214
|
+
# # => Numo::DFloat#shape=[9]
|
265
215
|
# # [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
266
216
|
#
|
267
217
|
# a = Numo::DFloat[[1, 2, 3]]
|
268
|
-
#
|
269
|
-
# # Numo::DFloat#shape=[3,3]
|
218
|
+
# a.append([[4, 5, 6], [7, 8, 9]],axis:0)
|
219
|
+
# # => Numo::DFloat#shape=[3,3]
|
270
220
|
# # [[1, 2, 3],
|
271
221
|
# # [4, 5, 6],
|
272
222
|
# # [7, 8, 9]]
|
273
223
|
#
|
274
224
|
# a = Numo::DFloat[[1, 2, 3], [4, 5, 6]]
|
275
|
-
#
|
225
|
+
# a.append([7, 8, 9], axis:0)
|
276
226
|
# # in `append': dimension mismatch (Numo::NArray::DimensionError)
|
277
227
|
|
278
228
|
def append(other,axis:nil)
|
@@ -295,19 +245,19 @@ module Numo
|
|
295
245
|
|
296
246
|
# @example
|
297
247
|
# a = Numo::DFloat[[1,2,3,4], [5,6,7,8], [9,10,11,12]]
|
298
|
-
#
|
299
|
-
# # Numo::DFloat(view)#shape=[2,4]
|
248
|
+
# a.delete(1,0)
|
249
|
+
# # => Numo::DFloat(view)#shape=[2,4]
|
300
250
|
# # [[1, 2, 3, 4],
|
301
251
|
# # [9, 10, 11, 12]]
|
302
252
|
#
|
303
|
-
#
|
304
|
-
# # Numo::DFloat(view)#shape=[3,2]
|
253
|
+
# a.delete((0..-1).step(2),1)
|
254
|
+
# # => Numo::DFloat(view)#shape=[3,2]
|
305
255
|
# # [[2, 4],
|
306
256
|
# # [6, 8],
|
307
257
|
# # [10, 12]]
|
308
258
|
#
|
309
|
-
#
|
310
|
-
# # Numo::DFloat(view)#shape=[9]
|
259
|
+
# a.delete([1,3,5])
|
260
|
+
# # => Numo::DFloat(view)#shape=[9]
|
311
261
|
# # [1, 3, 5, 7, 8, 9, 10, 11, 12]
|
312
262
|
|
313
263
|
def delete(indice,axis=nil)
|
@@ -326,72 +276,72 @@ module Numo
|
|
326
276
|
|
327
277
|
# Insert values along the axis before the indices.
|
328
278
|
# @example
|
329
|
-
#
|
279
|
+
# a = Numo::DFloat[[1, 2], [3, 4]]
|
330
280
|
# a = Numo::Int32[[1, 1], [2, 2], [3, 3]]
|
331
281
|
#
|
332
|
-
#
|
333
|
-
# # Numo::Int32#shape=[7]
|
282
|
+
# a.insert(1,5)
|
283
|
+
# # => Numo::Int32#shape=[7]
|
334
284
|
# # [1, 5, 1, 2, 2, 3, 3]
|
335
285
|
#
|
336
|
-
#
|
337
|
-
# # Numo::Int32#shape=[3,3]
|
286
|
+
# a.insert(1, 5, axis:1)
|
287
|
+
# # => Numo::Int32#shape=[3,3]
|
338
288
|
# # [[1, 5, 1],
|
339
289
|
# # [2, 5, 2],
|
340
290
|
# # [3, 5, 3]]
|
341
291
|
#
|
342
|
-
#
|
343
|
-
# # Numo::Int32#shape=[3,3]
|
292
|
+
# a.insert([1], [[11],[12],[13]], axis:1)
|
293
|
+
# # => Numo::Int32#shape=[3,3]
|
344
294
|
# # [[1, 11, 1],
|
345
295
|
# # [2, 12, 2],
|
346
296
|
# # [3, 13, 3]]
|
347
297
|
#
|
348
|
-
#
|
349
|
-
# # Numo::Int32#shape=[3,3]
|
298
|
+
# a.insert(1, [11, 12, 13], axis:1)
|
299
|
+
# # => Numo::Int32#shape=[3,3]
|
350
300
|
# # [[1, 11, 1],
|
351
301
|
# # [2, 12, 2],
|
352
302
|
# # [3, 13, 3]]
|
353
303
|
#
|
354
|
-
#
|
355
|
-
# # Numo::Int32#shape=[3,5]
|
304
|
+
# a.insert([1], [11, 12, 13], axis:1)
|
305
|
+
# # => Numo::Int32#shape=[3,5]
|
356
306
|
# # [[1, 11, 12, 13, 1],
|
357
307
|
# # [2, 11, 12, 13, 2],
|
358
308
|
# # [3, 11, 12, 13, 3]]
|
359
309
|
#
|
360
|
-
#
|
361
|
-
# # Numo::Int32(view)#shape=[6]
|
310
|
+
# b = a.flatten
|
311
|
+
# # => Numo::Int32(view)#shape=[6]
|
362
312
|
# # [1, 1, 2, 2, 3, 3]
|
363
313
|
#
|
364
|
-
#
|
365
|
-
# # Numo::Int32#shape=[8]
|
314
|
+
# b.insert(2,[15,16])
|
315
|
+
# # => Numo::Int32#shape=[8]
|
366
316
|
# # [1, 1, 15, 16, 2, 2, 3, 3]
|
367
317
|
#
|
368
|
-
#
|
369
|
-
# # Numo::Int32#shape=[8]
|
318
|
+
# b.insert([2,2],[15,16])
|
319
|
+
# # => Numo::Int32#shape=[8]
|
370
320
|
# # [1, 1, 15, 16, 2, 2, 3, 3]
|
371
321
|
#
|
372
|
-
#
|
373
|
-
# # Numo::Int32#shape=[8]
|
322
|
+
# b.insert([2,1],[15,16])
|
323
|
+
# # => Numo::Int32#shape=[8]
|
374
324
|
# # [1, 16, 1, 15, 2, 2, 3, 3]
|
375
325
|
#
|
376
|
-
#
|
377
|
-
# # Numo::Int32#shape=[9]
|
326
|
+
# b.insert([2,0,1],[15,16,17])
|
327
|
+
# # => Numo::Int32#shape=[9]
|
378
328
|
# # [16, 1, 17, 1, 15, 2, 2, 3, 3]
|
379
329
|
#
|
380
|
-
#
|
381
|
-
# # Numo::Int32#shape=[8]
|
330
|
+
# b.insert(2..3, [15, 16])
|
331
|
+
# # => Numo::Int32#shape=[8]
|
382
332
|
# # [1, 1, 15, 2, 16, 2, 3, 3]
|
383
333
|
#
|
384
|
-
#
|
385
|
-
# # Numo::Int32#shape=[8]
|
334
|
+
# b.insert(2, [7.13, 0.5])
|
335
|
+
# # => Numo::Int32#shape=[8]
|
386
336
|
# # [1, 1, 7, 0, 2, 2, 3, 3]
|
387
337
|
#
|
388
|
-
#
|
389
|
-
# # Numo::DFloat#shape=[2,4]
|
338
|
+
# x = Numo::DFloat.new(2,4).seq
|
339
|
+
# # => Numo::DFloat#shape=[2,4]
|
390
340
|
# # [[0, 1, 2, 3],
|
391
341
|
# # [4, 5, 6, 7]]
|
392
342
|
#
|
393
|
-
#
|
394
|
-
# # Numo::DFloat#shape=[2,6]
|
343
|
+
# x.insert([1,3],999,axis:1)
|
344
|
+
# # => Numo::DFloat#shape=[2,6]
|
395
345
|
# # [[0, 999, 1, 2, 999, 3],
|
396
346
|
# # [4, 999, 5, 6, 999, 7]]
|
397
347
|
|
@@ -441,23 +391,23 @@ module Numo
|
|
441
391
|
|
442
392
|
class << self
|
443
393
|
# @example
|
444
|
-
#
|
445
|
-
# # Numo::DFloat#shape=[2,2]
|
394
|
+
# a = Numo::DFloat[[1, 2], [3, 4]]
|
395
|
+
# # => Numo::DFloat#shape=[2,2]
|
446
396
|
# # [[1, 2],
|
447
397
|
# # [3, 4]]
|
448
398
|
#
|
449
|
-
#
|
450
|
-
# # Numo::DFloat#shape=[1,2]
|
399
|
+
# b = Numo::DFloat[[5, 6]]
|
400
|
+
# # => Numo::DFloat#shape=[1,2]
|
451
401
|
# # [[5, 6]]
|
452
402
|
#
|
453
|
-
#
|
454
|
-
# # Numo::DFloat#shape=[3,2]
|
403
|
+
# Numo::NArray.concatenate([a,b],axis:0)
|
404
|
+
# # => Numo::DFloat#shape=[3,2]
|
455
405
|
# # [[1, 2],
|
456
406
|
# # [3, 4],
|
457
407
|
# # [5, 6]]
|
458
408
|
#
|
459
|
-
#
|
460
|
-
# # Numo::DFloat#shape=[2,3]
|
409
|
+
# Numo::NArray.concatenate([a,b.transpose], axis:1)
|
410
|
+
# # => Numo::DFloat#shape=[2,3]
|
461
411
|
# # [[1, 2, 5],
|
462
412
|
# # [3, 4, 6]]
|
463
413
|
|
@@ -509,8 +459,10 @@ module Numo
|
|
509
459
|
arrays.each do |a|
|
510
460
|
fst = lst
|
511
461
|
lst = fst + (a.shape[axis-nd]||1)
|
512
|
-
|
513
|
-
|
462
|
+
if lst > fst
|
463
|
+
refs[axis] = fst...lst
|
464
|
+
result[*refs] = a
|
465
|
+
end
|
514
466
|
end
|
515
467
|
result
|
516
468
|
end
|
@@ -519,15 +471,15 @@ module Numo
|
|
519
471
|
# @example
|
520
472
|
# a = Numo::Int32[1,2,3]
|
521
473
|
# b = Numo::Int32[2,3,4]
|
522
|
-
#
|
523
|
-
# # Numo::Int32#shape=[2,3]
|
474
|
+
# Numo::NArray.vstack([a,b])
|
475
|
+
# # => Numo::Int32#shape=[2,3]
|
524
476
|
# # [[1, 2, 3],
|
525
477
|
# # [2, 3, 4]]
|
526
478
|
#
|
527
479
|
# a = Numo::Int32[[1],[2],[3]]
|
528
480
|
# b = Numo::Int32[[2],[3],[4]]
|
529
|
-
#
|
530
|
-
# # Numo::Int32#shape=[6,1]
|
481
|
+
# Numo::NArray.vstack([a,b])
|
482
|
+
# # => Numo::Int32#shape=[6,1]
|
531
483
|
# # [[1],
|
532
484
|
# # [2],
|
533
485
|
# # [3],
|
@@ -546,14 +498,14 @@ module Numo
|
|
546
498
|
# @example
|
547
499
|
# a = Numo::Int32[1,2,3]
|
548
500
|
# b = Numo::Int32[2,3,4]
|
549
|
-
#
|
550
|
-
# # Numo::Int32#shape=[6]
|
501
|
+
# Numo::NArray.hstack([a,b])
|
502
|
+
# # => Numo::Int32#shape=[6]
|
551
503
|
# # [1, 2, 3, 2, 3, 4]
|
552
504
|
#
|
553
505
|
# a = Numo::Int32[[1],[2],[3]]
|
554
506
|
# b = Numo::Int32[[2],[3],[4]]
|
555
|
-
#
|
556
|
-
# # Numo::Int32#shape=[3,2]
|
507
|
+
# Numo::NArray.hstack([a,b])
|
508
|
+
# # => Numo::Int32#shape=[3,2]
|
557
509
|
# # [[1, 2],
|
558
510
|
# # [2, 3],
|
559
511
|
# # [3, 4]]
|
@@ -574,16 +526,16 @@ module Numo
|
|
574
526
|
# @example
|
575
527
|
# a = Numo::Int32[1,2,3]
|
576
528
|
# b = Numo::Int32[2,3,4]
|
577
|
-
#
|
578
|
-
# # Numo::Int32#shape=[1,3,2]
|
529
|
+
# Numo::NArray.dstack([a,b])
|
530
|
+
# # => Numo::Int32#shape=[1,3,2]
|
579
531
|
# # [[[1, 2],
|
580
532
|
# # [2, 3],
|
581
533
|
# # [3, 4]]]
|
582
534
|
#
|
583
535
|
# a = Numo::Int32[[1],[2],[3]]
|
584
536
|
# b = Numo::Int32[[2],[3],[4]]
|
585
|
-
#
|
586
|
-
# # Numo::Int32#shape=[3,1,2]
|
537
|
+
# Numo::NArray.dstack([a,b])
|
538
|
+
# # => Numo::Int32#shape=[3,1,2]
|
587
539
|
# # [[[1, 2]],
|
588
540
|
# # [[2, 3]],
|
589
541
|
# # [[3, 4]]]
|
@@ -599,8 +551,8 @@ module Numo
|
|
599
551
|
# @example
|
600
552
|
# x = Numo::Int32[1,2,3]
|
601
553
|
# y = Numo::Int32[2,3,4]
|
602
|
-
#
|
603
|
-
# # Numo::Int32#shape=[3,2]
|
554
|
+
# Numo::NArray.column_stack([x,y])
|
555
|
+
# # => Numo::Int32#shape=[3,2]
|
604
556
|
# # [[1, 2],
|
605
557
|
# # [2, 3],
|
606
558
|
# # [3, 4]]
|
@@ -640,23 +592,23 @@ module Numo
|
|
640
592
|
end # class << self
|
641
593
|
|
642
594
|
# @example
|
643
|
-
#
|
644
|
-
# # Numo::DFloat#shape=[2,2]
|
595
|
+
# a = Numo::DFloat[[1, 2], [3, 4]]
|
596
|
+
# # => Numo::DFloat#shape=[2,2]
|
645
597
|
# # [[1, 2],
|
646
598
|
# # [3, 4]]
|
647
599
|
#
|
648
|
-
#
|
649
|
-
# # Numo::DFloat#shape=[1,2]
|
600
|
+
# b = Numo::DFloat[[5, 6]]
|
601
|
+
# # => Numo::DFloat#shape=[1,2]
|
650
602
|
# # [[5, 6]]
|
651
603
|
#
|
652
|
-
#
|
653
|
-
# # Numo::DFloat#shape=[3,2]
|
604
|
+
# a.concatenate(b,axis:0)
|
605
|
+
# # => Numo::DFloat#shape=[3,2]
|
654
606
|
# # [[1, 2],
|
655
607
|
# # [3, 4],
|
656
608
|
# # [5, 6]]
|
657
609
|
#
|
658
|
-
#
|
659
|
-
# # Numo::DFloat#shape=[2,3]
|
610
|
+
# a.concatenate(b.transpose, axis:1)
|
611
|
+
# # => Numo::DFloat#shape=[2,3]
|
660
612
|
# # [[1, 2, 5],
|
661
613
|
# # [3, 4, 6]]
|
662
614
|
|
@@ -690,36 +642,40 @@ module Numo
|
|
690
642
|
result = self.class.zeros(*self_shape)
|
691
643
|
lst = shape[axis]
|
692
644
|
refs = [true] * ndim
|
693
|
-
|
694
|
-
|
645
|
+
if lst > 0
|
646
|
+
refs[axis] = 0...lst
|
647
|
+
result[*refs] = self
|
648
|
+
end
|
695
649
|
arrays.each do |a|
|
696
650
|
fst = lst
|
697
651
|
lst = fst + (a.shape[axis-ndim] || 1)
|
698
|
-
|
699
|
-
|
652
|
+
if lst > fst
|
653
|
+
refs[axis] = fst...lst
|
654
|
+
result[*refs] = a
|
655
|
+
end
|
700
656
|
end
|
701
657
|
result
|
702
658
|
end
|
703
659
|
|
704
660
|
# @example
|
705
|
-
#
|
706
|
-
# # Numo::DFloat#shape=[9]
|
661
|
+
# x = Numo::DFloat.new(9).seq
|
662
|
+
# # => Numo::DFloat#shape=[9]
|
707
663
|
# # [0, 1, 2, 3, 4, 5, 6, 7, 8]
|
708
664
|
#
|
709
|
-
#
|
710
|
-
# # [Numo::DFloat(view)#shape=[3]
|
665
|
+
# x.split(3)
|
666
|
+
# # => [Numo::DFloat(view)#shape=[3]
|
711
667
|
# # [0, 1, 2],
|
712
668
|
# # Numo::DFloat(view)#shape=[3]
|
713
669
|
# # [3, 4, 5],
|
714
670
|
# # Numo::DFloat(view)#shape=[3]
|
715
671
|
# # [6, 7, 8]]
|
716
672
|
#
|
717
|
-
#
|
718
|
-
# # Numo::DFloat#shape=[8]
|
673
|
+
# x = Numo::DFloat.new(8).seq
|
674
|
+
# # => Numo::DFloat#shape=[8]
|
719
675
|
# # [0, 1, 2, 3, 4, 5, 6, 7]
|
720
676
|
#
|
721
|
-
#
|
722
|
-
# # [Numo::DFloat(view)#shape=[3]
|
677
|
+
# x.split([3, 5, 6, 10])
|
678
|
+
# # => [Numo::DFloat(view)#shape=[3]
|
723
679
|
# # [0, 1, 2],
|
724
680
|
# # Numo::DFloat(view)#shape=[2]
|
725
681
|
# # [3, 4],
|
@@ -766,15 +722,15 @@ module Numo
|
|
766
722
|
end
|
767
723
|
|
768
724
|
# @example
|
769
|
-
#
|
770
|
-
# # Numo::DFloat#shape=[4,4]
|
725
|
+
# x = Numo::DFloat.new(4,4).seq
|
726
|
+
# # => Numo::DFloat#shape=[4,4]
|
771
727
|
# # [[0, 1, 2, 3],
|
772
728
|
# # [4, 5, 6, 7],
|
773
729
|
# # [8, 9, 10, 11],
|
774
730
|
# # [12, 13, 14, 15]]
|
775
731
|
#
|
776
|
-
#
|
777
|
-
# # [Numo::DFloat(view)#shape=[4,2]
|
732
|
+
# x.hsplit(2)
|
733
|
+
# # => [Numo::DFloat(view)#shape=[4,2]
|
778
734
|
# # [[0, 1],
|
779
735
|
# # [4, 5],
|
780
736
|
# # [8, 9],
|
@@ -785,8 +741,8 @@ module Numo
|
|
785
741
|
# # [10, 11],
|
786
742
|
# # [14, 15]]]
|
787
743
|
#
|
788
|
-
#
|
789
|
-
# # [Numo::DFloat(view)#shape=[4,3]
|
744
|
+
# x.hsplit([3, 6])
|
745
|
+
# # => [Numo::DFloat(view)#shape=[4,3]
|
790
746
|
# # [[0, 1, 2],
|
791
747
|
# # [4, 5, 6],
|
792
748
|
# # [8, 9, 10],
|
@@ -811,47 +767,47 @@ module Numo
|
|
811
767
|
end
|
812
768
|
|
813
769
|
# @example
|
814
|
-
#
|
815
|
-
# # Numo::Int32#shape=[3]
|
770
|
+
# a = Numo::NArray[0,1,2]
|
771
|
+
# # => Numo::Int32#shape=[3]
|
816
772
|
# # [0, 1, 2]
|
817
773
|
#
|
818
|
-
#
|
819
|
-
# # Numo::Int32#shape=[6]
|
774
|
+
# a.tile(2)
|
775
|
+
# # => Numo::Int32#shape=[6]
|
820
776
|
# # [0, 1, 2, 0, 1, 2]
|
821
777
|
#
|
822
|
-
#
|
823
|
-
# # Numo::Int32#shape=[2,6]
|
778
|
+
# a.tile(2,2)
|
779
|
+
# # => Numo::Int32#shape=[2,6]
|
824
780
|
# # [[0, 1, 2, 0, 1, 2],
|
825
781
|
# # [0, 1, 2, 0, 1, 2]]
|
826
782
|
#
|
827
|
-
#
|
828
|
-
# # Numo::Int32#shape=[2,1,6]
|
783
|
+
# a.tile(2,1,2)
|
784
|
+
# # => Numo::Int32#shape=[2,1,6]
|
829
785
|
# # [[[0, 1, 2, 0, 1, 2]],
|
830
786
|
# # [[0, 1, 2, 0, 1, 2]]]
|
831
787
|
#
|
832
|
-
#
|
833
|
-
# # Numo::Int32#shape=[2,2]
|
788
|
+
# b = Numo::NArray[[1, 2], [3, 4]]
|
789
|
+
# # => Numo::Int32#shape=[2,2]
|
834
790
|
# # [[1, 2],
|
835
791
|
# # [3, 4]]
|
836
792
|
#
|
837
|
-
#
|
838
|
-
# # Numo::Int32#shape=[2,4]
|
793
|
+
# b.tile(2)
|
794
|
+
# # => Numo::Int32#shape=[2,4]
|
839
795
|
# # [[1, 2, 1, 2],
|
840
796
|
# # [3, 4, 3, 4]]
|
841
797
|
#
|
842
|
-
#
|
843
|
-
# # Numo::Int32#shape=[4,2]
|
798
|
+
# b.tile(2,1)
|
799
|
+
# # => Numo::Int32#shape=[4,2]
|
844
800
|
# # [[1, 2],
|
845
801
|
# # [3, 4],
|
846
802
|
# # [1, 2],
|
847
803
|
# # [3, 4]]
|
848
804
|
#
|
849
|
-
#
|
850
|
-
# # Numo::Int32#shape=[4]
|
805
|
+
# c = Numo::NArray[1,2,3,4]
|
806
|
+
# # => Numo::Int32#shape=[4]
|
851
807
|
# # [1, 2, 3, 4]
|
852
808
|
#
|
853
|
-
#
|
854
|
-
# # Numo::Int32#shape=[4,4]
|
809
|
+
# c.tile(4,1)
|
810
|
+
# # => Numo::Int32#shape=[4,4]
|
855
811
|
# # [[1, 2, 3, 4],
|
856
812
|
# # [1, 2, 3, 4],
|
857
813
|
# # [1, 2, 3, 4],
|
@@ -894,26 +850,26 @@ module Numo
|
|
894
850
|
end
|
895
851
|
|
896
852
|
# @example
|
897
|
-
#
|
898
|
-
# # Numo::Int32#shape=[4]
|
853
|
+
# Numo::NArray[3].repeat(4)
|
854
|
+
# # => Numo::Int32#shape=[4]
|
899
855
|
# # [3, 3, 3, 3]
|
900
856
|
#
|
901
|
-
#
|
902
|
-
# # Numo::Int32#shape=[2,2]
|
857
|
+
# x = Numo::NArray[[1,2],[3,4]]
|
858
|
+
# # => Numo::Int32#shape=[2,2]
|
903
859
|
# # [[1, 2],
|
904
860
|
# # [3, 4]]
|
905
861
|
#
|
906
|
-
#
|
907
|
-
# # Numo::Int32#shape=[8]
|
862
|
+
# x.repeat(2)
|
863
|
+
# # => Numo::Int32#shape=[8]
|
908
864
|
# # [1, 1, 2, 2, 3, 3, 4, 4]
|
909
865
|
#
|
910
|
-
#
|
911
|
-
# # Numo::Int32#shape=[2,6]
|
866
|
+
# x.repeat(3,axis:1)
|
867
|
+
# # => Numo::Int32#shape=[2,6]
|
912
868
|
# # [[1, 1, 1, 2, 2, 2],
|
913
869
|
# # [3, 3, 3, 4, 4, 4]]
|
914
870
|
#
|
915
|
-
#
|
916
|
-
# # Numo::Int32#shape=[3,2]
|
871
|
+
# x.repeat([1,2],axis:0)
|
872
|
+
# # => Numo::Int32#shape=[3,2]
|
917
873
|
# # [[1, 2],
|
918
874
|
# # [3, 4],
|
919
875
|
# # [3, 4]]
|
@@ -954,30 +910,30 @@ module Numo
|
|
954
910
|
|
955
911
|
# Calculate the n-th discrete difference along given axis.
|
956
912
|
# @example
|
957
|
-
#
|
958
|
-
# # Numo::DFloat#shape=[5]
|
913
|
+
# x = Numo::DFloat[1, 2, 4, 7, 0]
|
914
|
+
# # => Numo::DFloat#shape=[5]
|
959
915
|
# # [1, 2, 4, 7, 0]
|
960
916
|
#
|
961
|
-
#
|
962
|
-
# # Numo::DFloat#shape=[4]
|
917
|
+
# x.diff
|
918
|
+
# # => Numo::DFloat#shape=[4]
|
963
919
|
# # [1, 2, 3, -7]
|
964
920
|
#
|
965
|
-
#
|
966
|
-
# # Numo::DFloat#shape=[3]
|
921
|
+
# x.diff(2)
|
922
|
+
# # => Numo::DFloat#shape=[3]
|
967
923
|
# # [1, 1, -10]
|
968
924
|
#
|
969
|
-
#
|
970
|
-
# # Numo::DFloat#shape=[2,4]
|
925
|
+
# x = Numo::DFloat[[1, 3, 6, 10], [0, 5, 6, 8]]
|
926
|
+
# # => Numo::DFloat#shape=[2,4]
|
971
927
|
# # [[1, 3, 6, 10],
|
972
928
|
# # [0, 5, 6, 8]]
|
973
929
|
#
|
974
|
-
#
|
975
|
-
# # Numo::DFloat#shape=[2,3]
|
930
|
+
# x.diff
|
931
|
+
# # => Numo::DFloat#shape=[2,3]
|
976
932
|
# # [[2, 3, 4],
|
977
933
|
# # [5, 1, 2]]
|
978
934
|
#
|
979
|
-
#
|
980
|
-
# # Numo::DFloat#shape=[1,4]
|
935
|
+
# x.diff(axis:0)
|
936
|
+
# # => Numo::DFloat#shape=[1,4]
|
981
937
|
# # [[-1, 2, 0, -2]]
|
982
938
|
|
983
939
|
def diff(n=1,axis:-1)
|
@@ -1182,18 +1138,20 @@ module Numo
|
|
1182
1138
|
# @return [Numo::NArray] return outer product
|
1183
1139
|
# @example
|
1184
1140
|
# a = Numo::DFloat.ones(5)
|
1185
|
-
# => Numo::DFloat#shape=[5]
|
1186
|
-
# [1, 1, 1, 1, 1]
|
1141
|
+
# # => Numo::DFloat#shape=[5]
|
1142
|
+
# # [1, 1, 1, 1, 1]
|
1143
|
+
#
|
1187
1144
|
# b = Numo::DFloat.linspace(-2,2,5)
|
1188
|
-
# => Numo::DFloat#shape=[5]
|
1189
|
-
# [-2, -1, 0, 1, 2]
|
1145
|
+
# # => Numo::DFloat#shape=[5]
|
1146
|
+
# # [-2, -1, 0, 1, 2]
|
1147
|
+
#
|
1190
1148
|
# a.outer(b)
|
1191
|
-
# => Numo::DFloat#shape=[5,5]
|
1192
|
-
# [[-2, -1, 0, 1, 2],
|
1193
|
-
#
|
1194
|
-
#
|
1195
|
-
#
|
1196
|
-
#
|
1149
|
+
# # => Numo::DFloat#shape=[5,5]
|
1150
|
+
# # [[-2, -1, 0, 1, 2],
|
1151
|
+
# # [-2, -1, 0, 1, 2],
|
1152
|
+
# # [-2, -1, 0, 1, 2],
|
1153
|
+
# # [-2, -1, 0, 1, 2],
|
1154
|
+
# # [-2, -1, 0, 1, 2]]
|
1197
1155
|
|
1198
1156
|
def outer(b, axis:nil)
|
1199
1157
|
b = NArray.cast(b)
|
@@ -1222,17 +1180,19 @@ module Numo
|
|
1222
1180
|
# @return [Numo::NArray] return Kronecker product
|
1223
1181
|
# @example
|
1224
1182
|
# Numo::DFloat[1,10,100].kron([5,6,7])
|
1225
|
-
# => Numo::DFloat#shape=[9]
|
1226
|
-
# [5, 6, 7, 50, 60, 70, 500, 600, 700]
|
1183
|
+
# # => Numo::DFloat#shape=[9]
|
1184
|
+
# # [5, 6, 7, 50, 60, 70, 500, 600, 700]
|
1185
|
+
#
|
1227
1186
|
# Numo::DFloat[5,6,7].kron([1,10,100])
|
1228
|
-
# => Numo::DFloat#shape=[9]
|
1229
|
-
# [5, 50, 500, 6, 60, 600, 7, 70, 700]
|
1187
|
+
# # => Numo::DFloat#shape=[9]
|
1188
|
+
# # [5, 50, 500, 6, 60, 600, 7, 70, 700]
|
1189
|
+
#
|
1230
1190
|
# Numo::DFloat.eye(2).kron(Numo::DFloat.ones(2,2))
|
1231
|
-
# => Numo::DFloat#shape=[4,4]
|
1232
|
-
# [[1, 1, 0, 0],
|
1233
|
-
#
|
1234
|
-
#
|
1235
|
-
#
|
1191
|
+
# # => Numo::DFloat#shape=[4,4]
|
1192
|
+
# # [[1, 1, 0, 0],
|
1193
|
+
# # [1, 1, 0, 0],
|
1194
|
+
# # [0, 0, 1, 1],
|
1195
|
+
# # [0, 0, 1, 1]]
|
1236
1196
|
|
1237
1197
|
def kron(b)
|
1238
1198
|
b = NArray.cast(b)
|