Class: NArrayMiss

Inherits:
Object
  • Object
show all
Includes:
NMMath
Defined in:
lib/narray_miss/version.rb,
lib/narray_miss/narray_miss.rb,
lib/narray_miss/narray_miss.rb

Constant Summary collapse

VERSION =
"1.3.0"
BYTE =

Class Constants

— NArrayMiss::BYTE

type code for 1 byte unsigned integer.

— NArrayMiss::SINT

type code for 2 byte signed integer.

— NArrayMiss::LINT

type code for 4 byte signed integer.

— NArrayMiss::SFLOAT

type code for single precision float.

— NArrayMiss::FLOAT

type code for double precision float.

— NArrayMiss::SCOMPLEX

type code for single precision complex.

— NArrayMiss::COMPLEX

type code for double precision complex.

— NArrayMiss::OBJECT

type code for Ruby object.

go back to ((<Index>))

NARRAY::BYTE
SINT =
NARRAY::SINT
INT =
NARRAY::INT
LINT =
NARRAY::LINT
LLINT =
NARRAY::LINT
MINT =

int for mask operations

LINT
SFLOAT =
NARRAY::SFLOAT
FLOAT =
NARRAY::FLOAT
SCOMPLEX =
NARRAY::SCOMPLEX
COMPLEX =
NARRAY::COMPLEX
OBJECT =
NARRAY::OBJECT
@@llint =
false

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.[](*arg) ⇒ Object



177
178
179
# File 'lib/narray_miss/narray_miss.rb', line 177

def self.[](*arg)
  NArrayMiss.to_nam(NARRAY[*arg])
end

.__new__Object



95
# File 'lib/narray_miss/narray_miss.rb', line 95

alias :__new__ :new

._load(o) ⇒ Object



1280
1281
1282
1283
1284
1285
# File 'lib/narray_miss/narray_miss.rb', line 1280

def self._load(o)
  ary, mask = Marshal::load(o)
  ary = NARRAY._load(ary)
  mask = NARRAY._load(mask)
  NArrayMiss.to_nam_no_dup(ary,mask)
end

.byte(*arg) ⇒ Object



145
146
147
# File 'lib/narray_miss/narray_miss.rb', line 145

def self.byte(*arg)
  NArrayMiss.new(BYTE,*arg)
end

.complex(*arg) ⇒ Object



171
172
173
# File 'lib/narray_miss/narray_miss.rb', line 171

def self.complex(*arg)
  NArrayMiss.new(COMPLEX,*arg)
end

.float(*arg) ⇒ Object



165
166
167
# File 'lib/narray_miss/narray_miss.rb', line 165

def self.float(*arg)
  NArrayMiss.new(FLOAT,*arg)
end

.int(*arg) ⇒ Object



151
152
153
# File 'lib/narray_miss/narray_miss.rb', line 151

def self.int(*arg)
  NArrayMiss.new(INT,*arg)
end

.lint(*arg) ⇒ Object



154
155
156
# File 'lib/narray_miss/narray_miss.rb', line 154

def self.lint(*arg)
  NArrayMiss.new(LINT,*arg)
end

.llint(*arg) ⇒ Object



158
159
160
# File 'lib/narray_miss/narray_miss.rb', line 158

def self.llint(*arg)
  NArrayMiss.new(LLINT,*arg)
end

.new(*arg) ⇒ Object

Class Methods

— NArrayMiss.new(typecode, size, …)

create (({NArrayMiss})) of ((|typecode|)).
All elements are initialized with 0.

— NArrayMiss.byte(size, …)

same as NArrayMiss.new(NArrayMiss::BYTE, ((|size|)), ...).

— NArrayMiss.sint(size, …)

same as NArrayMiss.new(NArrayMiss::SINT, ((|size|)), ...).

— NArrayMiss.int(size, …)

same as NArrayMiss.new(NArrayMiss::LINT, ((|size|)), ...).

— NArrayMiss.sfloat(size, …)

same as NArrayMiss.new(NArrayMiss::SFLOAT, ((|size|)), ...).

— NArrayMiss.float(size, …)

same as NArrayMiss.new(NArrayMiss::FLOAT, ((|size|)), ...).

— NArrayMiss.scomplex(size, …)

same as NArrayMiss.new(NArrayMiss::SCOMPLEX, ((|size|)), ...).

— NArrayMiss.complex(size, …)

same as NArrayMiss.new(NArrayMiss::COMPLEX, ((|size|)), ...).

— NArrayMiss.object(size, …)

same as NArrayMiss.new(NArrayMiss::OBJECT, ((|size|)), ...).

— NArrayMiss[](value, …)

create (({NArrayMiss})) form [((|value|)), ...].

— NArrayMiss.to_nam(array [,mask])

create (({NArrayMiss})) from ((|array|)).
((|array|)) must be (({Numeric})) (({Array})) or (({NArray})).

— NArrayMiss.to_nam_no_dup(array [,mask])

convert from ((|array|)) to (({NArrayMiss})).

go back to ((<Index>))



140
141
142
143
144
# File 'lib/narray_miss/narray_miss.rb', line 140

def self.new(*arg)
  array = NARRAY.new(*arg)
  mask = NARRAY.byte(*arg[1..-1])
  __new__(array, mask)
end

.object(*arg) ⇒ Object



174
175
176
# File 'lib/narray_miss/narray_miss.rb', line 174

def self.object(*arg)
  NArrayMiss.new(OBJECT,*arg)
end

.scomplex(*arg) ⇒ Object



168
169
170
# File 'lib/narray_miss/narray_miss.rb', line 168

def self.scomplex(*arg)
  NArrayMiss.new(SCOMPLEX,*arg)
end

.sfloat(*arg) ⇒ Object



162
163
164
# File 'lib/narray_miss/narray_miss.rb', line 162

def self.sfloat(*arg)
  NArrayMiss.new(SFLOAT,*arg)
end

.sint(*arg) ⇒ Object



148
149
150
# File 'lib/narray_miss/narray_miss.rb', line 148

def self.sint(*arg)
  NArrayMiss.new(SINT,*arg)
end

.to_nam(*arg) ⇒ Object



215
216
217
218
219
220
221
222
223
224
# File 'lib/narray_miss/narray_miss.rb', line 215

def self.to_nam(*arg)
  if !(Numeric===arg[0]) && !(Array===arg[0]) && !arg[0].is_a?(NARRAY)
    raise "first argument must be Numeric, NArray or Array"
  end
  arg[0] = arg[0].dup if !(Numeric===arg[0])
  if arg.length==2 && !(Numeric===arg[1]) && arg[1].class!=TrueClass && arg[1].class!=FalseClass then
    arg[1] = arg[1].dup
  end
  NArrayMiss.to_nam_no_dup(*arg)
end

.to_nam_no_dup(*arg) ⇒ Object



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/narray_miss/narray_miss.rb', line 180

def self.to_nam_no_dup(*arg)
  if arg.length > 2 || arg.length==0 then
    raise("NArrayMiss.to_nar( array [,mask]] )")
  end

  array = arg[0]
  if Numeric===array then array = NARRAY[array] end
  if Array===array then array = NARRAY.to_na(array) end
  if !array.is_a?(NARRAY) then
    raise("argument must be Numeric, NArray or Array")
  end

  if arg.length==2 then
    mask = arg[1]
    if Numeric===mask then mask = array.ne(mask) end
    if Array===mask then
	mask = NARRAY.to_na(mask).ne(0)
    end
    if mask.class == FalseClass then
	mask = NARRAY.byte(*array.shape)
    end
    if mask.class == TrueClass then
	mask = NARRAY.byte(*array.shape).fill(1)
    end
    if !(NARRAY===mask && mask.typecode==BYTE) then
 raise("mask must be Numeric, Array, true, false or NArray(byte)")
    end
    if mask.length!=array.length
      raise "mask.length must be same as array.length"
    end
  else
    mask = NARRAY.byte(*array.shape).fill(1)
  end
  __new__(array,mask)
end

Instance Method Details

#%(arg) ⇒ Object



426
427
428
# File 'lib/narray_miss/narray_miss.rb', line 426

def %(arg)
  binary_operation(arg, 1){|t1, t2| t1 % t2}
end

#&(arg) ⇒ Object



475
476
477
# File 'lib/narray_miss/narray_miss.rb', line 475

def &(arg)
  binary_operation(arg, 1){|t1, t2| t1 & t2}
end

#*(arg) ⇒ Object



420
421
422
# File 'lib/narray_miss/narray_miss.rb', line 420

def *(arg)
  binary_operation(arg, 1){|t1, t2| t1 * t2}
end

#**(arg) ⇒ Object



429
430
431
# File 'lib/narray_miss/narray_miss.rb', line 429

def **(arg)
  binary_operation(arg, 1){|t1, t2| t1 ** t2}
end

#+(arg) ⇒ Object



414
415
416
# File 'lib/narray_miss/narray_miss.rb', line 414

def +(arg)
  binary_operation(arg, 0){|t1, t2| t1 + t2}
end

#-(arg) ⇒ Object



417
418
419
# File 'lib/narray_miss/narray_miss.rb', line 417

def -(arg)
  binary_operation(arg, 0){|t1, t2| t1 - t2}
end

#-@Object

Arithmetic operator

— NArrayMiss#-@ — NArrayMiss#+(other) — NArrayMiss#-(other) — NArrayMiss#*(other) — NArrayMiss#/(other) — NArrayMiss#%(other) — NArrayMiss#**(other) — NArrayMiss#abs — NArrayMiss#add!(other) — NArrayMiss#sbt!(other) — NArrayMiss#mul!(other) — NArrayMiss#div!(other) — NArrayMiss#mod!(other) — NArrayMiss#mul_add(other, dim, …)



409
410
411
412
413
# File 'lib/narray_miss/narray_miss.rb', line 409

def -@
  array = @array.dup
  array[@mask] = -@array[@mask]
  NArrayMiss.to_nam_no_dup(array, @mask.dup)
end

#/(arg) ⇒ Object



423
424
425
# File 'lib/narray_miss/narray_miss.rb', line 423

def /(arg)
  binary_operation(arg, 1){|t1, t2| t1 / t2}
end

#==(arg) ⇒ Object



537
538
539
540
541
542
543
# File 'lib/narray_miss/narray_miss.rb', line 537

def ==(arg)
  if arg.kind_of?(NArrayMiss) then
    @mask==arg.get_mask! && @array[@mask]==arg.get_array![@mask]
  else
    false
  end
end

#[](*arg) ⇒ Object

Slicing Array

— NArrayMiss#[](index)

return the value at [((|index|))].
((|index|)) must be (({Integer, Range, Array, true})).
Index order is FORTRAN type.

— NArrayMiss#slice(index)

same as (({NArrayMiss#[]})) but keeps the rank of original array by not elimiting dimensions whose length became equal to 1 (which (({NArrayMiss#[]})) dose).
This is not the case with the 1-dimensional indexing and masking.

— NArrayMiss#set_without_validation(index,value)

replace elements at ((|index|)) by ((|value|)).

— NArrayMiss#[]=(index, value)

replace elements at ((|index|)) by ((|value|)) and
make replaced elements valid.


292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# File 'lib/narray_miss/narray_miss.rb', line 292

def [](*arg)
  if arg[0].class == NArrayMiss && arg[0].typecode == BYTE
    obj = @array[arg[0].to_na(0)]
    if Numeric===obj
      return obj
    else
      return NArrayMiss.to_nam_no_dup(obj)
    end
  else
    obj = @array[*arg]
    if Numeric===obj
      return obj
    else
      return NArrayMiss.to_nam_no_dup(obj,@mask[*arg])
    end
  end
end

#[]=(*arg) ⇒ Object



336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# File 'lib/narray_miss/narray_miss.rb', line 336

def []=(*arg)
  if arg.length == 2 && arg[0].class == NArrayMiss && arg[0].typecode == BYTE
    idx = arg[0].to_na(0)
    self.set_without_validation(idx,arg[-1])
    if arg[-1].class != NArrayMiss && arg[-1] then
      @mask[idx] = 1
    end
  else
    self.set_without_validation(*arg)
    if arg[-1].class != NArrayMiss && arg[-1] then
      if arg.length==1 then
        @mask=1
      else
        @mask[*arg[0..-2]] = 1
      end
    end
  end
  return self
end

#^(arg) ⇒ Object



481
482
483
# File 'lib/narray_miss/narray_miss.rb', line 481

def ^(arg)
  binary_operation(arg, 1){|t1, t2| t1 ^ t2}
end

#__clone__Object



1194
# File 'lib/narray_miss/narray_miss.rb', line 1194

alias __clone__ clone

#_dump(limit) ⇒ Object



1277
1278
1279
# File 'lib/narray_miss/narray_miss.rb', line 1277

def _dump(limit)
  Marshal::dump([@array._dump(nil),@mask._dump(nil)])
end

#absObject



433
434
435
436
437
# File 'lib/narray_miss/narray_miss.rb', line 433

def abs
  array = @array.dup
  array[@mask] = @array[@mask].abs
  NArrayMiss.to_nam_no_dup(array, @mask.dup)
end

#accum(*arg) ⇒ Object

Statistics

— NArrayMiss#sum(dim, … [“min_count”=>i])

return summation of elements in specified dimensions.
Elements at which the number of elements for summation is less than ((|i|)) is invalid.

— NArrayMiss#accum(dim, …)

same as (({NArrayMiss#sum})) but not elimiting dimensions whose length became equal to 1.

— NArrayMiss#min(dim, …)

return minimum in specified dimensions.
Elements at which the number of valid elements in the dimension is less than ((|i|)) is invalid.

— NArrayMiss#max(dim, …)

return maximum in specified dimensions.
Elements at which the number of valid elements in the dimension is less than ((|i|)) is invalid.

— NArrayMiss#median(dim, …)

return median in specified dimensions.
Elements at which the number of valid elements in the dimension is less than ((|i|)) is invalid.

— NArrayMiss#mean(dim, …)

return mean of elements in specified dimensions.
Elements at which the number of elements for then mean is less than ((|i|)) is invalid.

— NArrayMiss#stddev(dim, …)

return standard deviation of elements in specified dimensions.
Elements at which the number of elements for calculation the standard deviation is less than ((|i|)) is invalid.

— NArrayMiss#rms(dim, …)

return root mean square of elements in specified dimensions.
Elements at which the number of elements for calculation the RMS is less than ((|i|)) is invalid.

— NArrayMiss#rmsdev(dim, …)

return root mean square deviation of elements in specified dimensions.
Elements at which the number of elements for calculation the RMS deviation is less than ((|i|)) is invalid.


576
577
578
579
580
581
582
583
584
585
# File 'lib/narray_miss/narray_miss.rb', line 576

def accum(*arg)
  if @mask.count_true == 0 then
    return nil
  else
    array = @array.dup
    array[@mask.not] = 0
    return NArrayMiss.to_nam_no_dup(array.accum(*arg),
	       @mask.to_type(MINT).accum(*arg).ne(0))
  end
end

#add!(arg) ⇒ Object



439
440
441
# File 'lib/narray_miss/narray_miss.rb', line 439

def add!(arg)
  binary_operation(arg, 0){|t1, t2| t1.add!(t2)}
end

#all?Boolean

Returns:

  • (Boolean)


934
935
936
# File 'lib/narray_miss/narray_miss.rb', line 934

def all?
  @array[@mask].all?
end

#all_invalidObject



1074
1075
1076
1077
# File 'lib/narray_miss/narray_miss.rb', line 1074

def all_invalid
  @mask[true]=0
  self
end

#all_validObject



1070
1071
1072
1073
# File 'lib/narray_miss/narray_miss.rb', line 1070

def all_valid
  @mask[true]=1
  self
end

#all_valid?Boolean

Returns:

  • (Boolean)


1141
1142
1143
# File 'lib/narray_miss/narray_miss.rb', line 1141

def all_valid?
  @mask.all?
end

#and(arg) ⇒ Object



523
524
525
# File 'lib/narray_miss/narray_miss.rb', line 523

def and(arg)
  binary_operation(arg, 1){|t1, t2| t1.and t2}
end

#angleObject



973
974
975
# File 'lib/narray_miss/narray_miss.rb', line 973

def angle
  NArrayMiss.to_nam_no_dup(@array.angle,@mask)
end

#any?Boolean

Returns:

  • (Boolean)


937
938
939
# File 'lib/narray_miss/narray_miss.rb', line 937

def any?
  @array[@mask].any?
end

#any_valid?Boolean

Returns:

  • (Boolean)


1148
1149
1150
# File 'lib/narray_miss/narray_miss.rb', line 1148

def any_valid?
  @mask.any?
end

#ceilObject



813
814
815
# File 'lib/narray_miss/narray_miss.rb', line 813

def ceil
  NArrayMiss.to_nam_no_dup(@array.ceil, @mask.dup)
end

#cloneObject



1195
1196
1197
1198
1199
1200
# File 'lib/narray_miss/narray_miss.rb', line 1195

def clone
  obj = __clone__
  obj.set_array(@array.clone)
  obj.set_mask(@mask.clone)
  return obj
end

#coerce(x) ⇒ Object



1202
1203
1204
1205
1206
1207
1208
1209
1210
# File 'lib/narray_miss/narray_miss.rb', line 1202

def coerce(x)
  if Numeric===x then
    return [NArrayMiss.new(NARRAY[x].typecode,*self.shape).fill(x),self]
  elsif x.class==Array || x.class==NARRAY then
    return [NArrayMiss.to_nam(x), self]
  else
    raise("donnot know how to cange #{x.class} to NArrayMiss")
  end
end

#collect(&blk) ⇒ Object



886
887
888
# File 'lib/narray_miss/narray_miss.rb', line 886

def collect(&blk)
  self.dup.collect!(&blk)
end

#collect!Object



880
881
882
883
884
885
# File 'lib/narray_miss/narray_miss.rb', line 880

def collect!
  for i in 0..self.total-1
    self[i] = yield(self[i])
  end
  self
end

#complex?Boolean

Returns:

  • (Boolean)


1185
1186
1187
# File 'lib/narray_miss/narray_miss.rb', line 1185

def complex?
  @array.complex?
end

#conjObject



970
971
972
# File 'lib/narray_miss/narray_miss.rb', line 970

def conj
  NArrayMiss.to_nam_no_dup(@array.conj,@mask)
end

#count_falseObject

— NArrayMiss#count_false

return the number of elements whose value==0 and valid.

— NArrayMiss#count_true

return the number of elements whose value!=0 and valid.

— NArrayMiss#mask(mask)

return (({NArrayMiss#get_mask!&((|mask|))})).

— NArrayMiss#all?

return true if all the valid elements are not 0, else false.

— NArrayMiss#any?

return true if any valid element is not 0, else false.

— NArrayMiss#none?

return true if none of the valid elements is not 0, else false.

— NArrayMiss#where

return (({NArray})) of indices where valid elements are not 0.

— NArrayMiss#where2

return (({Array})) including two (({NArray}))s of indices,
where valid elements are not 0, and 0, respectively.


912
913
914
915
916
917
918
# File 'lib/narray_miss/narray_miss.rb', line 912

def count_false
  if @array.typecode==BYTE then
    return @array.count_false-@mask.count_false
  else
    raise("cannot count_true NArrayMiss except BYTE type")
  end
end

#count_invalid(*arg) ⇒ Object



1159
1160
1161
1162
1163
1164
1165
1166
# File 'lib/narray_miss/narray_miss.rb', line 1159

def count_invalid(*arg)
  if arg.length==0 then
    return @mask.count_false
  else
    return NARRAY.int(*@mask.shape).fill(1).sum(*arg)-
    @mask.to_type(MINT).sum(*arg)
  end
end

#count_trueObject



919
920
921
922
923
924
925
# File 'lib/narray_miss/narray_miss.rb', line 919

def count_true
  if @array.typecode==BYTE then
    return (@array&@mask).count_true
  else
    raise("cannot count_true NArrayMiss except BYTE type")
  end
end

#count_valid(*arg) ⇒ Object



1152
1153
1154
1155
1156
1157
1158
# File 'lib/narray_miss/narray_miss.rb', line 1152

def count_valid(*arg)
  if arg.length==0 then
    return @mask.count_true
  else
    return @mask.to_type(MINT).sum(*arg)
  end    
end

#dimObject

NArrayMiss information

— NArrayMiss#dim

return the dimension which is the number of indices.

— NArrayMiss#rank

same as (({NArrayMiss#dim})).

— NArrayMiss#shape

return the (({Array})) of sizes of each index.

— NArrayMiss#size

return the number of total elements.

— NArrayMiss#total

alias to size

— NArrayMiss#length

alias to size

— NArrayMiss#rank_total

return the number of total of the shape.

— NArrayMiss#typecode

return the typecode.


252
253
254
# File 'lib/narray_miss/narray_miss.rb', line 252

def dim
  @array.dim
end

#div!(arg) ⇒ Object



448
449
450
# File 'lib/narray_miss/narray_miss.rb', line 448

def div!(arg)
  binary_operation(arg, 1){|t1, t2| t1.div!(t2)}
end

#dupObject



1190
1191
1192
# File 'lib/narray_miss/narray_miss.rb', line 1190

def dup
  NArrayMiss.to_nam(@array,@mask)
end

#eachObject

Iteration

— NArrayMiss#each{|x| …} — NArrayMiss#each_valid{|x| …} — NArrayMiss#each_valid_with_index{|x,i| …} — NArrayMiss#collect{|x| …} — NArrayMiss#collect{|x| …}



865
866
867
868
869
# File 'lib/narray_miss/narray_miss.rb', line 865

def each
  for i in 0..self.total-1
    yield(@array[i])
  end
end

#each_validObject



870
871
872
873
874
# File 'lib/narray_miss/narray_miss.rb', line 870

def each_valid
  for i in 0..self.total-1
    yield(@array[i]) if @mask[i]
  end
end

#each_valid_with_indexObject



875
876
877
878
879
# File 'lib/narray_miss/narray_miss.rb', line 875

def each_valid_with_index
  for i in 0..self.total-1
    yield(@array[i],i) if @mask[i]
  end
end

#eq(arg) ⇒ Object

Comparison

— NArrayMiss#eq(other) — NArrayMiss#ne(other) — NArrayMiss#gt(other) — NArrayMiss#ge(other) — NArrayMiss#lt(other) — NArrayMiss#le(other) — NArrayMiss#>(other) — NArrayMiss#>=(other) — NArrayMiss#<(other) — NArrayMiss#<=(other) — NArrayMiss#and(other) — NArrayMiss#or(other) — NArrayMiss#xor(other) — NArrayMiss#not(other)



504
505
506
# File 'lib/narray_miss/narray_miss.rb', line 504

def eq(arg)
  binary_operation(arg, 0){|t1, t2| t1.eq t2}
end

#floorObject

Type conversion

— NArrayMiss#floor

return (({NArrayMiss})) of integer whose elements processed (({floor})).

— NArrayMiss#ceil

return (({NArrayMiss})) of integer whose elements processed (({ceil})).

— NArrayMiss#round

return (({NArrayMiss})) of integer whose elements processed (({round})).

— NArrayMiss#to_i

return (({NArrayMiss})) of integer whose elements processed (({to_i})).

— NArrayMiss#to_f

return (({NArrayMiss})) of float whose elements processed (({to_f})).

— NArrayMiss#to_type(typecode)

return (({NArrayMiss})) of ((|typecode|)).

— NArrayMiss#to_a

convert (({NArrayMiss})) to (({Array})).

NArrayMiss#to_na!()

convert (({NArrayMiss})) to (({NArray})).
if there is argument, set missing_value for invalid elements.

NArrayMiss#to_na()

convert (({NArrayMiss})) to (({NArray})).
if there is argument, set missing_value for invalid elements.

— NArrayMiss#to_s

convert (({NArrayMiss})) to (({String})) as a binary data.

— NArrayMiss#to_string

create (({NArrayMiss})) of object whose elements are processed (({to_s}))


810
811
812
# File 'lib/narray_miss/narray_miss.rb', line 810

def floor
  NArrayMiss.to_nam_no_dup(@array.floor, @mask.dup)
end

#ge(arg) ⇒ Object



513
514
515
# File 'lib/narray_miss/narray_miss.rb', line 513

def ge(arg)
  binary_operation(arg, 0){|t1, t2| t1.ge t2}
end

#get_arrayObject



1119
1120
1121
# File 'lib/narray_miss/narray_miss.rb', line 1119

def get_array
  @array.dup
end

#get_array!Object



1116
1117
1118
# File 'lib/narray_miss/narray_miss.rb', line 1116

def get_array!
  @array
end

#get_maskObject



1113
1114
1115
# File 'lib/narray_miss/narray_miss.rb', line 1113

def get_mask
  @mask.dup
end

#get_mask!Object



1110
1111
1112
# File 'lib/narray_miss/narray_miss.rb', line 1110

def get_mask!
  @mask
end

#gt(arg) ⇒ Object



510
511
512
# File 'lib/narray_miss/narray_miss.rb', line 510

def gt(arg)
  binary_operation(arg, 0){|t1, t2| t1.gt t2}
end

#htonObject Also known as: ntoh



1004
1005
1006
# File 'lib/narray_miss/narray_miss.rb', line 1004

def hton
  NArrayMiss.to_nam(@array.hton,@mask.hton)
end

#htovObject Also known as: vtoh



1008
1009
1010
# File 'lib/narray_miss/narray_miss.rb', line 1008

def htov
  NArrayMiss.to_nam(@array.htov,@mask.htov)
end

#imObject



980
981
982
# File 'lib/narray_miss/narray_miss.rb', line 980

def im
  NArrayMiss.to_nam_no_dup(@array.im,@mask)
end

#imagObject



967
968
969
# File 'lib/narray_miss/narray_miss.rb', line 967

def imag
  NArrayMiss.to_nam_no_dup(@array.imag,@mask)
end

#imag=(arg) ⇒ Object



976
977
978
979
# File 'lib/narray_miss/narray_miss.rb', line 976

def imag=(arg)
  @array.image=(arg)
  self
end

#inspectObject



1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
# File 'lib/narray_miss/narray_miss.rb', line 1213

def inspect
#    "array -> " + @array.inspect + "\nmask  -> " + @mask.inspect
  count_line = 0
  max_line = 10
  max_col = 80
  sep = ", "
  const = Hash.new
  NARRAY.constants.each{|c| const[NARRAY.const_get(c)] = c}
  str_ret = "NArrayMiss."+const[typecode].to_s.downcase+"("+shape.join(",")+"):"
  if rank == 0 then
    str_ret << " []"
    return str_ret
  else
     str_ret << "\n"
  end
  str = ""
  index = Array.new(rank,0)
  index[0] = true
  i = 1
  (rank-1).times{ str_ret << "[ " }
  while(true)
    i.times{ str_ret << "[ " }

    str = @array[*index].inspect
    ary = str[str.index("[")+1..str.index("]")-1].strip.split(/\s*,\s*/)
    miss = @mask[*index].where2[1]
    miss = miss[miss<ary.length].to_a
    if ary[-1]=="..." && miss[-1]==ary.length-1 then miss.pop end
    for j in miss
	ary[j] = "-"
    end
    while ( rank*4+ary.join(", ").length > max_col )
      ary.pop
      ary[-1] = "..."
    end
    str_ret << ary.join(", ")
    i = 1
    while (i<rank)
	if index[i]<shape[i]-1 then
 str_ret << " ]" << sep << "\n"
 count_line += 1
 index[i] += 1
 break
	else
 str_ret << " ]"
 index[i] = 0
 i += 1
	end
    end

    if i>=rank then
	str_ret << " ]"
	return str_ret
    elsif count_line>=max_line then
	str_ret << " ..."
	return str_ret
    end

    (rank-i).times{ str_ret << "  " }
  end
  return str_ret
end

#integer?Boolean

Others

— NArrayMiss#integer?

return true if (({NArrayMiss})) is byte, sint or int, else false.

— NArrayMiss#complex?

return true if (({NArrayMiss})) is scomplex or complex, else false.

— NArrayMiss#dup — NArrayMiss#coerce(object) — NArrayMiss#inspect

go back to ((<Index>))

Returns:

  • (Boolean)


1182
1183
1184
# File 'lib/narray_miss/narray_miss.rb', line 1182

def integer?
  @array.integer?
end

#le(arg) ⇒ Object



519
520
521
# File 'lib/narray_miss/narray_miss.rb', line 519

def le(arg)
  binary_operation(arg, 0){|t1, t2| t1.le t2}
end

#lt(arg) ⇒ Object



516
517
518
# File 'lib/narray_miss/narray_miss.rb', line 516

def lt(arg)
  binary_operation(arg, 0){|t1, t2| t1.lt t2}
end

#mask(arg) ⇒ Object



926
927
928
929
930
931
932
# File 'lib/narray_miss/narray_miss.rb', line 926

def mask(arg)
  obj = self.dup
  if arg.class==NArrayMiss then
    arg = arg.get_array!&arg.get_mask!
  end
  obj.set_mask(@mask&arg)
end

#max(*dims) ⇒ Object



606
607
608
609
610
611
612
613
614
615
# File 'lib/narray_miss/narray_miss.rb', line 606

def max(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 欠損値に最小値を入れて普通に max する
  # byte,sint,int,sfloat,float の MIN の値を入れるように変更すべき
  ary0 = @array.dup
  ary0[@mask.not] = @array.min
  NArrayMiss.reduction(@mask, rank, min_count, dims, false, typecode) do
    ary0.max(*dims)
  end
end

#mean(*dims) ⇒ Object



617
618
619
620
621
622
623
624
# File 'lib/narray_miss/narray_miss.rb', line 617

def mean(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
  NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
    ary0.sum(*dims)/count_sum
  end
end

#median(*arg) ⇒ Object



658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
# File 'lib/narray_miss/narray_miss.rb', line 658

def median(*arg)
  if arg.length==0 then
    return @array[@mask].median
  else
    nshape = NARRAY.to_na(@array.shape)
    nshape[arg]=1
    nslice = nshape[nshape.ne(1).where]
    index = NARRAY.object(@mask.rank)
    index[nshape.eq(1).where] = true
    obj = NArrayMiss.new(@array.typecode,*nslice.to_a)
    total = 1
    nslice.each{|n| total *= n}
    for i in 0...total
      index[nshape.ne(1).where] = pos(i,nslice)
      mask = NARRAY.byte(*@array.shape).fill(0)
      mask[*index] = 1
      mask = @mask&mask
      if mask.count_true != 0 then
        obj[*pos(i,nslice)] = @array[mask].median
      end
    end
    return obj
  end
end

#min(*dims) ⇒ Object



596
597
598
599
600
601
602
603
604
605
# File 'lib/narray_miss/narray_miss.rb', line 596

def min(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 欠損値に最大値を入れて普通に min する
  # byte,sint,int,sfloat,float の MAX の値を入れるように変更すべき
  ary0 = @array.dup
  ary0[@mask.not] = @array.max
  NArrayMiss.reduction(@mask, rank, min_count, dims, false, typecode) do
    ary0.min(*dims)
  end
end

#mod!(arg) ⇒ Object



451
452
453
# File 'lib/narray_miss/narray_miss.rb', line 451

def mod!(arg)
  binary_operation(arg, 1){|t1, t2| t1.mod!(t2)}
end

#mul!(arg) ⇒ Object



445
446
447
# File 'lib/narray_miss/narray_miss.rb', line 445

def mul!(arg)
  binary_operation(arg, 1){|t1, t2| t1.mul!(t2)}
end

#mul_add(*arg) ⇒ Object



455
456
457
458
459
460
461
# File 'lib/narray_miss/narray_miss.rb', line 455

def mul_add(*arg)
  if arg.length==1 then
    return (self*arg[0]).sum
  else
    return (self*arg[0]).sum(*arg[1..-1])
  end
end

#ne(arg) ⇒ Object



507
508
509
# File 'lib/narray_miss/narray_miss.rb', line 507

def ne(arg)
  binary_operation(arg, 0){|t1, t2| t1.ne t2}
end

#newdim(*arg) ⇒ Object Also known as: rewrank



775
776
777
778
# File 'lib/narray_miss/narray_miss.rb', line 775

def newdim(*arg)
  obj = self.dup
  obj.newdim!(*arg)
end

#newdim!(*arg) ⇒ Object Also known as: rewrank!, rewrank=



768
769
770
771
772
# File 'lib/narray_miss/narray_miss.rb', line 768

def newdim!(*arg)
  @array = @array.newdim!(*arg)
  @mask = @mask.newdim!(*arg)
  self
end

#none?Boolean

Returns:

  • (Boolean)


940
941
942
# File 'lib/narray_miss/narray_miss.rb', line 940

def none?
  @array[@mask].none?
end

#none_valid?Boolean Also known as: all_invalid?

Returns:

  • (Boolean)


1144
1145
1146
# File 'lib/narray_miss/narray_miss.rb', line 1144

def none_valid?
  @mask.none?
end

#notObject



533
534
535
# File 'lib/narray_miss/narray_miss.rb', line 533

def not
  NArrayMiss.to_nam_no_dup(@array.not, @mask.dup)
end

#or(arg) ⇒ Object



526
527
528
# File 'lib/narray_miss/narray_miss.rb', line 526

def or(arg)
  binary_operation(arg, 0){|t1, t2| t1.or t2}
end

#rankObject



255
256
257
# File 'lib/narray_miss/narray_miss.rb', line 255

def rank
  @array.rank
end

#rank_total(*arg) ⇒ Object



267
268
269
# File 'lib/narray_miss/narray_miss.rb', line 267

def rank_total(*arg)
  @array.rank_total(*arg)
end

#realObject

Complex compound number (only for scomplex and complex)

— NArrayMiss#real — NArrayMiss#imag — NArrayMiss#conj — NArrayMiss#angle — NArrayMiss#imag=(other) — NArrayMiss#im



964
965
966
# File 'lib/narray_miss/narray_miss.rb', line 964

def real
  NArrayMiss.to_nam_no_dup(@array.real,@mask)
end

#reshape(*arg) ⇒ Object



763
764
765
766
# File 'lib/narray_miss/narray_miss.rb', line 763

def reshape(*arg)
  obj = self.dup
  obj.reshape!(*arg)
end

#reshape!(*arg) ⇒ Object Also known as: shape=

Changing Shapes of indices

— NArrayMiss#reshape!(size, …)

change shape of array.

— NArrayMiss#reshape(size, …)

same as (({NArrayMiss#reshape!})) but create new object.

— NArrayMiss#shape=(size, …)

same as (({NArrayMiss#reshape!})).

— NArrayMiss#newdim!(dim)

insert new dimension with size=1

— NArrayMiss#newdim(dim)

same as (({NArrayMiss#newdim!})) but create new object.

— NArrayMiss#rewrank!(dim)

same as (({NArrayMiss#newdim!})).

— NArrayMiss#rewrank=(dim)

same as (({NArrayMiss#newdim!})).


758
759
760
761
762
# File 'lib/narray_miss/narray_miss.rb', line 758

def reshape!(*arg)
  @array = @array.reshape!(*arg)
  @mask = @mask.reshape!(*arg)
  self
end

#rms(*dims) ⇒ Object



636
637
638
639
640
641
642
643
644
645
# File 'lib/narray_miss/narray_miss.rb', line 636

def rms(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
  NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
    ary0 = ary0.abs if ary0.complex?
    ary0 = (ary0**2).sum(*dims) / count_sum
    NMMath.sqrt(ary0)
  end
end

#rmsdev(*dims) ⇒ Object



646
647
648
649
650
651
652
653
654
655
656
# File 'lib/narray_miss/narray_miss.rb', line 646

def rmsdev(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
  NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
    ary0 = ary0 - ary0.accum(*dims)/count_accum
    ary0 = ary0.abs if ary0.complex?
    ary0 = (ary0**2).sum(*dims) / count_sum
    NMMath.sqrt(ary0)
  end
end

#roundObject



816
817
818
# File 'lib/narray_miss/narray_miss.rb', line 816

def round
  NArrayMiss.to_nam_no_dup(@array.round, @mask.dup)
end

#sbt!(arg) ⇒ Object



442
443
444
# File 'lib/narray_miss/narray_miss.rb', line 442

def sbt!(arg)
  binary_operation(arg, 0){|t1, t2| t1.sbt!(t2)}
end

#set_invalid(*pos) ⇒ Object Also known as: invalidation



1065
1066
1067
1068
# File 'lib/narray_miss/narray_miss.rb', line 1065

def set_invalid(*pos)
  @mask[*pos] = 0
  self
end

#set_mask(mask) ⇒ Object



1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
# File 'lib/narray_miss/narray_miss.rb', line 1078

def set_mask(mask)
  if mask.class == Array then
    tmp = NARRAY.byte(*@mask.shape)
    tmp[true] = mask
    mask = tmp
  end
  if mask.class == NArrayMiss then
    mask = mask.to_na(0)
  end
  if mask.class == NARRAY then
    if mask.typecode != BYTE then
	raise("mask must be NArrayMiss.byte, NArray.byte or Array")
    end
    if @array.shape != mask.shape then
	raise("mask.shape must be same as array")
    end
    @mask = mask.dup
    return self
  else
    raise("mask must be NArray.byte or Array")
  end
end

#set_missing_value(val) ⇒ Object



1105
1106
1107
1108
# File 'lib/narray_miss/narray_miss.rb', line 1105

def set_missing_value(val)
  obj = self.dup
  obj.set_missing_value!(val)
end

#set_missing_value!(val) ⇒ Object



1101
1102
1103
1104
# File 'lib/narray_miss/narray_miss.rb', line 1101

def set_missing_value!(val)
  @array[@mask.not] = val
  self
end

#set_valid(*pos) ⇒ Object Also known as: validation

Mask and missing value

— NArrayMiss#set_valid(index)

validate element at ((|index|)).
((|index|)) must be (({Integer, Range, Array, or ture})).

— NArrayMiss#validation(index)

alias to set_valid

— NArrayMiss#set_invalid(index)

invaliadate element at ((|index|)).
((|index|)) must be (({Integer, Range, Array, or ture})).

— NArrayMiss#invalidation(index)

alias to set_invalid

— NArrayMiss#all_valid

set all elements valid

— NArrayMiss#all_invalid

set all elements invalid

— NArrayMiss#set_mask(mask)

masking by ((|mask|))

— NArrayMiss#set_missing_value(value)

replace invalid elements by ((|value|)).

— NArrayMiss#get_mask!

return (({NArray})) of byte as mask.

— NArrayMiss#get_mask

return (({NArray})) of byte as mask.

— NArrayMiss#get_array!

return (({NArray})) as data.

— NArrayMiss#get_array

return (({NArray})) as data.

— NArrayMiss#valid?(index)

return (({Array})) whose elements are true or false, 
or (({True}))/(({False})) corresponding to validity of the specified element(s) by the ((|index|))

— NArrayMiss#all_valid?

return true if all elements are valid, else false.

— NArrayMiss#none_valid?

return true if all elements are invalid, else false.

— NArrayMiss#all_invalid?

alias to none_valid?

— NArrayMiss#any_valid?

return true if any elements are valid, else false.

— NArrayMiss#count_valid

return the number of valid elements.

— NArrayMiss#count_invalid

return the number of invalid elements.


1060
1061
1062
1063
# File 'lib/narray_miss/narray_miss.rb', line 1060

def set_valid(*pos)
  @mask[*pos] = 1
  self
end

#set_without_validation(*arg) ⇒ Object



313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
# File 'lib/narray_miss/narray_miss.rb', line 313

def set_without_validation(*arg)
  if arg.length==1 then
    if !arg[0] then
	@mask[] = 0
    elsif arg[0].class == NArrayMiss then
	@array[] = arg[0].get_array!
	@mask[] = arg[0].get_mask!
    else
	@array[] = arg[0]
    end
  else
    if !arg[-1] then
	@mask[*arg[0..-2]] = 0
    elsif arg[-1].class == NArrayMiss then
	@array[*arg[0..-2]] = arg[-1].get_array!
	@mask[*arg[0..-2]] = arg[-1].get_mask!
    else
	@array[*arg[0..-2]] = arg[-1]
    end
  end
  return self
end

#shapeObject



258
259
260
# File 'lib/narray_miss/narray_miss.rb', line 258

def shape
  @array.shape
end

#sizeObject Also known as: total, length



261
262
263
# File 'lib/narray_miss/narray_miss.rb', line 261

def size
  @array.size
end

#slice(*arg) ⇒ Object



309
310
311
# File 'lib/narray_miss/narray_miss.rb', line 309

def slice(*arg)
  NArrayMiss.to_nam_no_dup(@array.slice(*arg),@mask.slice(*arg))
end

#stddev(*dims) ⇒ Object



625
626
627
628
629
630
631
632
633
634
635
# File 'lib/narray_miss/narray_miss.rb', line 625

def stddev(*dims)
  min_count = NArrayMiss.check_options(dims, 2)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
  NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
    ary0 = ary0 - ary0.accum(*dims)/count_accum
    ary0 = ary0.abs if ary0.complex?
    ary0 = (ary0**2).sum(*dims) / (count_sum-1)
    NMMath.sqrt(ary0)
  end
end

#sum(*dims) ⇒ Object



587
588
589
590
591
592
593
594
595
# File 'lib/narray_miss/narray_miss.rb', line 587

def sum(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 欠損値に 0 を入れて普通に sum する
  ary0 = @array.dup
  ary0[@mask.not] = 0
  NArrayMiss.reduction(@mask, rank, min_count, dims, false, typecode) do
    ary0.sum(*dims)
  end
end

#swap_byteObject

Byte swap

— NArrayMiss#swap_byte

swap byte order.

— NArrayMiss#hton

convert to network byte order.

— NArrayMiss#ntoh

convert from network byte order.

— NArrayMiss#htov

convert to VAX byte order.

— NArrayMiss#vtoh

convert from VAX byte order.


999
1000
1001
1002
1003
# File 'lib/narray_miss/narray_miss.rb', line 999

def swap_byte
  obj = self.dup
  obj.set_without_validation(@array.swap_byte)
  obj
end

#to_aObject



829
830
831
# File 'lib/narray_miss/narray_miss.rb', line 829

def to_a
  @array.to_a
end

#to_fObject



822
823
824
# File 'lib/narray_miss/narray_miss.rb', line 822

def to_f
  NArrayMiss.to_nam_no_dup(@array.to_f, @mask.dup)
end

#to_iObject



819
820
821
# File 'lib/narray_miss/narray_miss.rb', line 819

def to_i
  NArrayMiss.to_nam_no_dup(@array.to_i, @mask.dup)
end

#to_na(*arg) ⇒ Object



842
843
844
# File 'lib/narray_miss/narray_miss.rb', line 842

def to_na(*arg)
  return self.dup.to_na!(*arg)
end

#to_na!(*arg) ⇒ Object



832
833
834
835
836
837
838
839
840
841
# File 'lib/narray_miss/narray_miss.rb', line 832

def to_na!(*arg)
  if arg.length==0
    return @array
  elsif arg.length==1 then
    self.set_missing_value!(arg[0])
    return @array
  else
    raise(ArgumentError, "Usage: NArrayMiss#to_na([missing_value])")
  end
end

#to_sObject



845
846
847
# File 'lib/narray_miss/narray_miss.rb', line 845

def to_s
  @array.to_s
end

#to_stringObject



848
849
850
851
852
853
# File 'lib/narray_miss/narray_miss.rb', line 848

def to_string
  obj = NArrayMiss.obj(*@array.shape)
  obj.set_without_validation( @array.to_string )
  obh.set_mask(@mask)
  obj
end

#to_type(typecode) ⇒ Object



826
827
828
# File 'lib/narray_miss/narray_miss.rb', line 826

def to_type(typecode)
  NArrayMiss.to_nam_no_dup(@array.to_type(typecode), @mask.dup)
end

#transpose(*arg) ⇒ Object

Transpose

— NArrayMiss#transpose(dim0, dim1, …)

transpose array. The 0-th dimension goes to the ((|dim0|))-th dimension of new array.


730
731
732
733
734
735
736
737
# File 'lib/narray_miss/narray_miss.rb', line 730

def transpose(*arg)
  obj = self.dup
  shape = arg.collect{|i| obj.shape[i]}
  obj.reshape!(*shape)
  obj.set_without_validation( @array.transpose(*arg) )
  obj.set_mask(@mask.transpose(*arg))
  obj
end

#typecodeObject



271
272
273
# File 'lib/narray_miss/narray_miss.rb', line 271

def typecode
  @array.typecode
end

#valid?(*arg) ⇒ Boolean

Returns:

  • (Boolean)


1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
# File 'lib/narray_miss/narray_miss.rb', line 1123

def valid?(*arg)
  if arg.any?
    # For the subset specified by the argument(s) (in the same way as for []).
    # Returns true or false if a single value is specified.
    # Otherwise, returns an Array of true of false
    mask = @mask[*arg]
    if mask.is_a?(Numeric)
      return mask == 1  # true if mask (==1); false if not
    end
  else
    # no argument
    mask = @mask
  end
  ary = mask.to_a
  ary.flatten!
  ary.map!{|i| i==1}  # true if element == 1; false if not
  return ary
end

#whereObject



944
945
946
# File 'lib/narray_miss/narray_miss.rb', line 944

def where
  (@array&@mask).where
end

#where2Object



947
948
949
# File 'lib/narray_miss/narray_miss.rb', line 947

def where2
  self.where-@mask.where
end

#xor(arg) ⇒ Object



529
530
531
# File 'lib/narray_miss/narray_miss.rb', line 529

def xor(arg)
  binary_operation(arg, 1){|t1, t2| t1.xor t2}
end

#|(arg) ⇒ Object



478
479
480
# File 'lib/narray_miss/narray_miss.rb', line 478

def |(arg)
  binary_operation(arg, 0){|t1, t2| t1 | t2}
end

#~@Object

Bitwise operator (only for byte, sint and int)

— NArrayMiss#~@ — NArrayMiss#&(other) — NArrayMiss#|(other) — NArrayMiss#^(other)



472
473
474
# File 'lib/narray_miss/narray_miss.rb', line 472

def ~@
  NArrayMiss.to_nam_to_dup(~@array, @mask.dup)
end