class NArrayMiss
Constants
- BYTE
Class Constants¶ ↑
- COMPLEX
- FLOAT
- INT
- OBJECT
- SCOMPLEX
- SFLOAT
- SINT
- VERSION
Public Class Methods
[](*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 147 def self.[](*arg) NArrayMiss.to_nam(NArray[*arg]) end
_load(o)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1250 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 123 def self.byte(*arg) NArrayMiss.new(BYTE,*arg) end
complex(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 141 def self.complex(*arg) NArrayMiss.new(COMPLEX,*arg) end
float(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 135 def self.float(*arg) NArrayMiss.new(FLOAT,*arg) end
int(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 129 def self.int(*arg) NArrayMiss.new(INT,*arg) end
new(*arg)
click to toggle source
Class Methods¶ ↑
# File lib/narray_miss/narray_miss.rb, line 118 def self.new(*arg) array = NArray.new(*arg) mask = NArray.byte(*arg[1..-1]) __new__(array, mask) end
Also aliased as: __new__
new(array, mask)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 77 def initialize(array, mask) if array.shape!=mask.shape raise "array and mask must have the same shape" end @array = array @mask = mask end
object(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 144 def self.object(*arg) NArrayMiss.new(OBJECT,*arg) end
scomplex(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 138 def self.scomplex(*arg) NArrayMiss.new(SCOMPLEX,*arg) end
sfloat(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 132 def self.sfloat(*arg) NArrayMiss.new(SFLOAT,*arg) end
sint(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 126 def self.sint(*arg) NArrayMiss.new(SINT,*arg) end
to_nam(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 185 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 150 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
Private Class Methods
check_options(arg, default_mincount)
click to toggle source
引数にオプション (Hash) が指定されているかチェックし、 されている場合は、オプションを取得し戻り値として返す。 現時点では、オプションは “min_count” のみ
# File lib/narray_miss/narray_miss.rb, line 1348 def self.check_options(arg, default_mincount) min_count = default_mincount options = %w(min_count) if arg.length!=0 && arg[-1].kind_of?(Hash) option = arg.pop option.each_key{|key| if !options.index(key) then raise(ArgumentError,key+" option is not exist") end } min_count = option["min_count"] || default_mincount min_count = min_count.to_i if min_count < default_mincount raise(ArgumentError, "min_count must be >= #{default_mincount}") end end return min_count end
reduction(mask, rank, min_count, dims, flag, typecode) { |count_sum, count_accum| ... }
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1307 def self.reduction(mask, rank, min_count, dims, flag, typecode) # flag: リダクションを行う次元方向の有効な値の個数で、割り算を行うかどうかのフラグ count_sum = mask.to_type(NArray::LINT).sum(*dims) # 返り値が配列か、スカラーかによって分岐 if count_sum.kind_of?(NArray) mask = count_sum.ge(min_count) # すべての要素が欠損値にならないかチェック if mask.any? count_accum = NArray.ref(count_sum) dims.collect{|d|d<0 ? d+rank : d}.sort.each do |d| count_accum.newdim!(d) end # 割り算を行う場合は、先に count_sum を NArrayMiss 化 # yield の戻り値は NArrayMiss # 割り算を行わない場合は、後で NArrayMiss 化 # yield の戻り値は NArray count_sum = NArrayMiss.to_nam_no_dup(count_sum,mask) if flag ary = yield(count_sum, count_accum) ary = NArrayMiss.to_nam_no_dup(ary, mask) unless flag else # すべての要素が欠損値の NArrayMiss を返す na = NArray.new(typecode, *mask.shape) ary = NArrayMiss.to_nam_no_dup(na, false) end else # 有効な要素数があるかチェック if count_sum >= min_count count_accum = NArray.int(*([1]*mask.rank)).fill!(count_sum) ary = yield(count_sum, count_accum) else # 有効な要素数が足りない場合は nil を返す return nil end end return ary end
Public Instance Methods
%(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 396 def %(arg) binary_operation(arg, 1){|t1, t2| t1 % t2} end
&(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 445 def &(arg) binary_operation(arg, 1){|t1, t2| t1 & t2} end
*(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 390 def *(arg) binary_operation(arg, 1){|t1, t2| t1 * t2} end
**(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 399 def **(arg) binary_operation(arg, 1){|t1, t2| t1 ** t2} end
+(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 384 def +(arg) binary_operation(arg, 0){|t1, t2| t1 + t2} end
-(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 387 def -(arg) binary_operation(arg, 0){|t1, t2| t1 - t2} end
-@()
click to toggle source
/(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 393 def /(arg) binary_operation(arg, 1){|t1, t2| t1 / t2} end
==(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 507 def ==(arg) if arg.kind_of?(NArrayMiss) then @mask==arg.get_mask! && @array[@mask]==arg.get_array![@mask] else false end end
[](*arg)
click to toggle source
Slicing Array¶ ↑
# File lib/narray_miss/narray_miss.rb, line 262 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 306 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 451 def ^(arg) binary_operation(arg, 1){|t1, t2| t1 ^ t2} end
_dump(limit)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1247 def _dump(limit) Marshal::dump([@array._dump(nil),@mask._dump(nil)]) end
abs()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 403 def abs array = @array.dup array[@mask] = @array[@mask].abs NArrayMiss.to_nam_no_dup(array, @mask.dup) end
accum(*arg)
click to toggle source
add!(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 409 def add!(arg) binary_operation(arg, 0){|t1, t2| t1.add!(t2)} end
all?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 904 def all? @array[@mask].all? end
all_invalid()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1044 def all_invalid @mask[true]=0 self end
all_valid()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1040 def all_valid @mask[true]=1 self end
all_valid?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1111 def all_valid? @mask.all? end
and(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 493 def and(arg) binary_operation(arg, 1){|t1, t2| t1.and t2} end
angle()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 943 def angle NArrayMiss.to_nam_no_dup(@array.angle,@mask) end
any?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 907 def any? @array[@mask].any? end
any_valid?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1118 def any_valid? @mask.any? end
ceil()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 783 def ceil NArrayMiss.to_nam_no_dup(@array.ceil, @mask.dup) end
clone()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1165 def clone obj = __clone__ obj.set_array(@array.clone) obj.set_mask(@mask.clone) return obj end
Also aliased as: __clone__
coerce(x)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1172 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 856 def collect(&blk) self.dup.collect!(&blk) end
collect!() { |self| ... }
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 850 def collect! for i in 0..self.total-1 self[i] = yield(self[i]) end self end
complex?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1155 def complex? @array.complex? end
conj()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 940 def conj NArrayMiss.to_nam_no_dup(@array.conj,@mask) end
count_false()
click to toggle source
count_invalid(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1129 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_true()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 889 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1122 def count_valid(*arg) if arg.length==0 then return @mask.count_true else return @mask.to_type(NArray::INT).sum(*arg) end end
dim()
click to toggle source
NArrayMiss information¶ ↑
# File lib/narray_miss/narray_miss.rb, line 222 def dim @array.dim end
div!(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 418 def div!(arg) binary_operation(arg, 1){|t1, t2| t1.div!(t2)} end
dup()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1160 def dup NArrayMiss.to_nam(@array,@mask) end
each() { |array| ... }
click to toggle source
each_valid() { |array| ... }
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 840 def each_valid for i in 0..self.total-1 yield(@array[i]) if @mask[i] end end
each_valid_with_index() { |array,i| ... }
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 845 def each_valid_with_index for i in 0..self.total-1 yield(@array[i],i) if @mask[i] end end
eq(arg)
click to toggle source
floor()
click to toggle source
ge(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 483 def ge(arg) binary_operation(arg, 0){|t1, t2| t1.ge t2} end
get_array()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1089 def get_array @array.dup end
get_array!()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1086 def get_array! @array end
get_mask()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1083 def get_mask @mask.dup end
get_mask!()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1080 def get_mask! @mask end
gt(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 480 def gt(arg) binary_operation(arg, 0){|t1, t2| t1.gt t2} end
hton()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 974 def hton NArrayMiss.to_nam(@array.hton,@mask.hton) end
Also aliased as: ntoh
htov()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 978 def htov NArrayMiss.to_nam(@array.htov,@mask.htov) end
Also aliased as: vtoh
im()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 950 def im NArrayMiss.to_nam_no_dup(@array.im,@mask) end
imag()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 937 def imag NArrayMiss.to_nam_no_dup(@array.imag,@mask) end
imag=(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 946 def imag=(arg) @array.image=(arg) self end
inspect()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1183 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?()
click to toggle source
le(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 489 def le(arg) binary_operation(arg, 0){|t1, t2| t1.le t2} end
lt(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 486 def lt(arg) binary_operation(arg, 0){|t1, t2| t1.lt t2} end
mask(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 896 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 576 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 587 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 628 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 566 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 421 def mod!(arg) binary_operation(arg, 1){|t1, t2| t1.mod!(t2)} end
mul!(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 415 def mul!(arg) binary_operation(arg, 1){|t1, t2| t1.mul!(t2)} end
mul_add(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 425 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 477 def ne(arg) binary_operation(arg, 0){|t1, t2| t1.ne t2} end
newdim(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 745 def newdim(*arg) obj = self.dup obj.newdim!(*arg) end
Also aliased as: rewrank
newdim!(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 738 def newdim!(*arg) @array = @array.newdim!(*arg) @mask = @mask.newdim!(*arg) self end
none?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 910 def none? @array[@mask].none? end
none_valid?()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1114 def none_valid? @mask.none? end
Also aliased as: all_invalid?
not()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 503 def not NArrayMiss.to_nam_no_dup(@array.not, @mask.dup) end
or(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 496 def or(arg) binary_operation(arg, 0){|t1, t2| t1.or t2} end
rank()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 225 def rank @array.rank end
rank_total(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 237 def rank_total(*arg) @array.rank_total(*arg) end
real()
click to toggle source
reshape(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 733 def reshape(*arg) obj = self.dup obj.reshape!(*arg) end
reshape!(*arg)
click to toggle source
Changing Shapes of indices¶ ↑
# File lib/narray_miss/narray_miss.rb, line 728 def reshape!(*arg) @array = @array.reshape!(*arg) @mask = @mask.reshape!(*arg) self end
Also aliased as: shape=
rms(*dims)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 606 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 616 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
round()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 786 def round NArrayMiss.to_nam_no_dup(@array.round, @mask.dup) end
sbt!(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 412 def sbt!(arg) binary_operation(arg, 0){|t1, t2| t1.sbt!(t2)} end
set_invalid(*pos)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1035 def set_invalid(*pos) @mask[*pos] = 0 self end
Also aliased as: invalidation
set_mask(mask)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1071 def set_missing_value!(val) @array[@mask.not] = val self end
set_valid(*pos)
click to toggle source
Mask and missing value¶ ↑
# File lib/narray_miss/narray_miss.rb, line 1030 def set_valid(*pos) @mask[*pos] = 1 self end
Also aliased as: validation
set_without_validation(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 283 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
shape()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 228 def shape @array.shape end
size()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 231 def size @array.size end
slice(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 279 def slice(*arg) NArrayMiss.to_nam_no_dup(@array.slice(*arg),@mask.slice(*arg)) end
stddev(*dims)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 595 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)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 557 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_byte()
click to toggle source
to_a()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 799 def to_a @array.to_a end
to_f()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 792 def to_f NArrayMiss.to_nam_no_dup(@array.to_f, @mask.dup) end
to_i()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 789 def to_i NArrayMiss.to_nam_no_dup(@array.to_i, @mask.dup) end
to_na(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 812 def to_na(*arg) return self.dup.to_na!(*arg) end
to_na!(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 802 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_s()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 815 def to_s @array.to_s end
to_string()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 818 def to_string obj = NArrayMiss.obj(*@array.shape) obj.set_without_validation( @array.to_string ) obh.set_mask(@mask) obj end
to_type(typecode)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 796 def to_type(typecode) NArrayMiss.to_nam_no_dup(@array.to_type(typecode), @mask.dup) end
transpose(*arg)
click to toggle source
typecode()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 241 def typecode @array.typecode end
valid?(*arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1093 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
where()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 914 def where (@array&@mask).where end
where2()
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 917 def where2 self.where-@mask.where end
xor(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 499 def xor(arg) binary_operation(arg, 1){|t1, t2| t1.xor t2} end
|(arg)
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 448 def |(arg) binary_operation(arg, 0){|t1, t2| t1 | t2} end
Private Instance Methods
binary_operation(arg, dummy) { |term1, term2| ... }
click to toggle source
# File lib/narray_miss/narray_miss.rb, line 1274 def binary_operation(arg, dummy) # arg: 第2項目のオブジェクト # dummy: 演算を行っても結果に影響を与えない特別な値。(欠損部分に代入する) flag=true case arg when Numeric term1 = @array term2 = arg mask = @mask when Array, NArray term1 = @array.dup term1[@mask.not] = dummy # 欠損部分に dummy を代入 term2 = arg.kind_of?(NArray) ? arg : NArray.to_na(arg) # Array -> NArray mask = NArray.byte(*term2.shape).fill(1) # 2項目は欠損無し mask = @mask & mask when NArrayMiss term1 = @array.dup term1[@mask.not] = dummy mask = arg.get_mask! term2 = arg.get_array term2[mask.not] = dummy mask = @mask & mask else term1, term2 = arg.coerce(self) # 演算を arg のクラスに任せるため、yield の結果をそのまま返す flag = false end result = yield(term1, term2) result = NArrayMiss.to_nam_no_dup(result, mask) if flag result end
pos(n,shape)
click to toggle source
private
# File lib/narray_miss/narray_miss.rb, line 1262 def pos(n,shape) rank = shape.length result = NArray.int(rank) m=n for i in 0..rank-2 j = rank-1-i result[j] = m/shape[j-1] m = m%shape[j-1] end result[0] = m result end