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.2.3"
BYTE =

Class Constants

— NArrayMiss::BYTE

type code for 1 byte unsigned integer.

— NArrayMiss::SINT

type code for 2 byte signed integer.

— NArrayMiss::INT

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
SFLOAT =
NArray::SFLOAT
FLOAT =
NArray::FLOAT
SCOMPLEX =
NArray::SCOMPLEX
COMPLEX =
NArray::COMPLEX
OBJECT =
NArray::OBJECT

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.[](*arg) ⇒ Object



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

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

.__new__Object



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

alias :__new__ :new

._load(o) ⇒ Object



1243
1244
1245
1246
1247
1248
# File 'lib/narray_miss/narray_miss.rb', line 1243

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



124
125
126
# File 'lib/narray_miss/narray_miss.rb', line 124

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

.complex(*arg) ⇒ Object



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

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

.float(*arg) ⇒ Object



136
137
138
# File 'lib/narray_miss/narray_miss.rb', line 136

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

.int(*arg) ⇒ Object



130
131
132
# File 'lib/narray_miss/narray_miss.rb', line 130

def self.int(*arg)
  NArrayMiss.new(INT,*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::INT, ((|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>))



119
120
121
122
123
# File 'lib/narray_miss/narray_miss.rb', line 119

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

.object(*arg) ⇒ Object



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

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

.scomplex(*arg) ⇒ Object



139
140
141
# File 'lib/narray_miss/narray_miss.rb', line 139

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

.sfloat(*arg) ⇒ Object



133
134
135
# File 'lib/narray_miss/narray_miss.rb', line 133

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

.sint(*arg) ⇒ Object



127
128
129
# File 'lib/narray_miss/narray_miss.rb', line 127

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

.to_nam(*arg) ⇒ Object



186
187
188
189
190
191
192
193
194
195
# File 'lib/narray_miss/narray_miss.rb', line 186

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



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/narray_miss/narray_miss.rb', line 151

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



397
398
399
# File 'lib/narray_miss/narray_miss.rb', line 397

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

#&(arg) ⇒ Object



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

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

#*(arg) ⇒ Object



391
392
393
# File 'lib/narray_miss/narray_miss.rb', line 391

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

#**(arg) ⇒ Object



400
401
402
# File 'lib/narray_miss/narray_miss.rb', line 400

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

#+(arg) ⇒ Object



385
386
387
# File 'lib/narray_miss/narray_miss.rb', line 385

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

#-(arg) ⇒ Object



388
389
390
# File 'lib/narray_miss/narray_miss.rb', line 388

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, …)



380
381
382
383
384
# File 'lib/narray_miss/narray_miss.rb', line 380

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

#/(arg) ⇒ Object



394
395
396
# File 'lib/narray_miss/narray_miss.rb', line 394

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

#==(arg) ⇒ Object



508
509
510
511
512
513
514
# File 'lib/narray_miss/narray_miss.rb', line 508

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.


263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/narray_miss/narray_miss.rb', line 263

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



307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/narray_miss/narray_miss.rb', line 307

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



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

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

#__clone__Object



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

alias __clone__ clone

#_dump(limit) ⇒ Object



1240
1241
1242
# File 'lib/narray_miss/narray_miss.rb', line 1240

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

#absObject



404
405
406
407
408
# File 'lib/narray_miss/narray_miss.rb', line 404

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.


547
548
549
550
551
552
553
554
555
556
# File 'lib/narray_miss/narray_miss.rb', line 547

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(NArray::INT).accum(*arg).ne(0))
  end
end

#add!(arg) ⇒ Object



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

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

#all?Boolean

Returns:

  • (Boolean)


905
906
907
# File 'lib/narray_miss/narray_miss.rb', line 905

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

#all_invalidObject



1044
1045
1046
1047
# File 'lib/narray_miss/narray_miss.rb', line 1044

def all_invalid
  @mask[true]=0
  self
end

#all_validObject



1040
1041
1042
1043
# File 'lib/narray_miss/narray_miss.rb', line 1040

def all_valid
  @mask[true]=1
  self
end

#all_valid?Boolean

Returns:

  • (Boolean)


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

def all_valid?
  @mask.all?
end

#and(arg) ⇒ Object



494
495
496
# File 'lib/narray_miss/narray_miss.rb', line 494

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

#angleObject



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

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

#any?Boolean

Returns:

  • (Boolean)


908
909
910
# File 'lib/narray_miss/narray_miss.rb', line 908

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

#any_valid?Boolean

Returns:

  • (Boolean)


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

def any_valid?
  @mask.any?
end

#ceilObject



784
785
786
# File 'lib/narray_miss/narray_miss.rb', line 784

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

#cloneObject



1158
1159
1160
1161
1162
1163
# File 'lib/narray_miss/narray_miss.rb', line 1158

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

#coerce(x) ⇒ Object



1165
1166
1167
1168
1169
1170
1171
1172
1173
# File 'lib/narray_miss/narray_miss.rb', line 1165

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



857
858
859
# File 'lib/narray_miss/narray_miss.rb', line 857

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

#collect!Object



851
852
853
854
855
856
# File 'lib/narray_miss/narray_miss.rb', line 851

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

#complex?Boolean

Returns:

  • (Boolean)


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

def complex?
  @array.complex?
end

#conjObject



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

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.


883
884
885
886
887
888
889
# File 'lib/narray_miss/narray_miss.rb', line 883

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



1122
1123
1124
1125
1126
1127
1128
1129
# File 'lib/narray_miss/narray_miss.rb', line 1122

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(NArray::INT).sum(*arg)
  end
end

#count_trueObject



890
891
892
893
894
895
896
# File 'lib/narray_miss/narray_miss.rb', line 890

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



1115
1116
1117
1118
1119
1120
1121
# File 'lib/narray_miss/narray_miss.rb', line 1115

def count_valid(*arg)
  if arg.length==0 then
    return @mask.count_true
  else
    return @mask.to_type(NArray::INT).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.


223
224
225
# File 'lib/narray_miss/narray_miss.rb', line 223

def dim
  @array.dim
end

#div!(arg) ⇒ Object



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

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

#dupObject



1153
1154
1155
# File 'lib/narray_miss/narray_miss.rb', line 1153

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| …}



836
837
838
839
840
# File 'lib/narray_miss/narray_miss.rb', line 836

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

#each_validObject



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

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

#each_valid_with_indexObject



846
847
848
849
850
# File 'lib/narray_miss/narray_miss.rb', line 846

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)



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

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}))


781
782
783
# File 'lib/narray_miss/narray_miss.rb', line 781

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

#ge(arg) ⇒ Object



484
485
486
# File 'lib/narray_miss/narray_miss.rb', line 484

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

#get_arrayObject



1089
1090
1091
# File 'lib/narray_miss/narray_miss.rb', line 1089

def get_array
  @array.dup
end

#get_array!Object



1086
1087
1088
# File 'lib/narray_miss/narray_miss.rb', line 1086

def get_array!
  @array
end

#get_maskObject



1083
1084
1085
# File 'lib/narray_miss/narray_miss.rb', line 1083

def get_mask
  @mask.dup
end

#get_mask!Object



1080
1081
1082
# File 'lib/narray_miss/narray_miss.rb', line 1080

def get_mask!
  @mask
end

#gt(arg) ⇒ Object



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

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

#htonObject Also known as: ntoh



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

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

#htovObject Also known as: vtoh



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

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

#imObject



951
952
953
# File 'lib/narray_miss/narray_miss.rb', line 951

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

#imagObject



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

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

#imag=(arg) ⇒ Object



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

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

#inspectObject



1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
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
# File 'lib/narray_miss/narray_miss.rb', line 1176

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)


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

def integer?
  @array.integer?
end

#le(arg) ⇒ Object



490
491
492
# File 'lib/narray_miss/narray_miss.rb', line 490

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

#lt(arg) ⇒ Object



487
488
489
# File 'lib/narray_miss/narray_miss.rb', line 487

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

#mask(arg) ⇒ Object



897
898
899
900
901
902
903
# File 'lib/narray_miss/narray_miss.rb', line 897

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



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

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, min_count, dims, false, typecode) do
    ary0.max(*dims)
  end
end

#mean(*dims) ⇒ Object



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

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

#median(*arg) ⇒ Object



629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
# File 'lib/narray_miss/narray_miss.rb', line 629

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



567
568
569
570
571
572
573
574
575
576
# File 'lib/narray_miss/narray_miss.rb', line 567

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, min_count, dims, false, typecode) do
    ary0.min(*dims)
  end
end

#mod!(arg) ⇒ Object



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

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

#mul!(arg) ⇒ Object



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

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

#mul_add(*arg) ⇒ Object



426
427
428
429
430
431
432
# File 'lib/narray_miss/narray_miss.rb', line 426

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



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

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

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



746
747
748
749
# File 'lib/narray_miss/narray_miss.rb', line 746

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

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



739
740
741
742
743
# File 'lib/narray_miss/narray_miss.rb', line 739

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

#none?Boolean

Returns:

  • (Boolean)


911
912
913
# File 'lib/narray_miss/narray_miss.rb', line 911

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

#none_valid?Boolean Also known as: all_invalid?

Returns:

  • (Boolean)


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

def none_valid?
  @mask.none?
end

#notObject



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

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

#or(arg) ⇒ Object



497
498
499
# File 'lib/narray_miss/narray_miss.rb', line 497

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

#rankObject



226
227
228
# File 'lib/narray_miss/narray_miss.rb', line 226

def rank
  @array.rank
end

#rank_total(*arg) ⇒ Object



238
239
240
# File 'lib/narray_miss/narray_miss.rb', line 238

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



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

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

#reshape(*arg) ⇒ Object



734
735
736
737
# File 'lib/narray_miss/narray_miss.rb', line 734

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!})).


729
730
731
732
733
# File 'lib/narray_miss/narray_miss.rb', line 729

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

#rms(*dims) ⇒ Object



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

def rms(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
  NArrayMiss.reduction(@mask, 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



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

def rmsdev(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
  NArrayMiss.reduction(@mask, 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



787
788
789
# File 'lib/narray_miss/narray_miss.rb', line 787

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

#sbt!(arg) ⇒ Object



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

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

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



1035
1036
1037
1038
# File 'lib/narray_miss/narray_miss.rb', line 1035

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

#set_mask(mask) ⇒ Object



1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
# File 'lib/narray_miss/narray_miss.rb', line 1048

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



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

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

#set_missing_value!(val) ⇒ Object



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

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?

return (({Array})) whose elements are true or false corresponding to valid or invalid of elements, respectively.

— 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.


1030
1031
1032
1033
# File 'lib/narray_miss/narray_miss.rb', line 1030

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

#set_without_validation(*arg) ⇒ Object



284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# File 'lib/narray_miss/narray_miss.rb', line 284

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



229
230
231
# File 'lib/narray_miss/narray_miss.rb', line 229

def shape
  @array.shape
end

#sizeObject Also known as: total, length



232
233
234
# File 'lib/narray_miss/narray_miss.rb', line 232

def size
  @array.size
end

#slice(*arg) ⇒ Object



280
281
282
# File 'lib/narray_miss/narray_miss.rb', line 280

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

#stddev(*dims) ⇒ Object



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

def stddev(*dims)
  min_count = NArrayMiss.check_options(dims, 2)
  # 整数型の場合は浮動小数型へ変換
  ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
  NArrayMiss.reduction(@mask, 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



558
559
560
561
562
563
564
565
566
# File 'lib/narray_miss/narray_miss.rb', line 558

def sum(*dims)
  min_count = NArrayMiss.check_options(dims, 1)
  # 欠損値に 0 を入れて普通に sum する
  ary0 = @array.dup
  ary0[@mask.not] = 0
  NArrayMiss.reduction(@mask, 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.


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

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

#to_aObject



800
801
802
# File 'lib/narray_miss/narray_miss.rb', line 800

def to_a
  @array.to_a
end

#to_fObject



793
794
795
# File 'lib/narray_miss/narray_miss.rb', line 793

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

#to_iObject



790
791
792
# File 'lib/narray_miss/narray_miss.rb', line 790

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

#to_na(*arg) ⇒ Object



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

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

#to_na!(*arg) ⇒ Object



803
804
805
806
807
808
809
810
811
812
# File 'lib/narray_miss/narray_miss.rb', line 803

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: NArray#to_na([missing_value])")
  end
end

#to_sObject



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

def to_s
  @array.to_s
end

#to_stringObject



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

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



797
798
799
# File 'lib/narray_miss/narray_miss.rb', line 797

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.


701
702
703
704
705
706
707
708
# File 'lib/narray_miss/narray_miss.rb', line 701

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



242
243
244
# File 'lib/narray_miss/narray_miss.rb', line 242

def typecode
  @array.typecode
end

#valid?Boolean

Returns:

  • (Boolean)


1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
# File 'lib/narray_miss/narray_miss.rb', line 1093

def valid?
  where = self.get_mask!.where2
  tf = Array.new(self.total)
  for i in where[0]
    tf[i] = true
  end
  for i in where[1]
    tf[i] = false
  end
  tf
end

#whereObject



915
916
917
# File 'lib/narray_miss/narray_miss.rb', line 915

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

#where2Object



918
919
920
# File 'lib/narray_miss/narray_miss.rb', line 918

def where2
  self.where-@mask.where
end

#xor(arg) ⇒ Object



500
501
502
# File 'lib/narray_miss/narray_miss.rb', line 500

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

#|(arg) ⇒ Object



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

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)



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

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