Class: NMatrix

### Home Classes Methods

### In Files

- src/na_linalg.c
- nmatrix.rb

### Parent

cNArray

### Methods

- #*
- #**
- #+
- #-
- #/
- #I
- #coerce_rev
- #diagonal
- #diagonal!
- #identity
- #inverse
- #transpose
- #unit

### Files

- ChangeLog
- MANIFEST
- SPEC.en.txt
- Makefile
- depend

### Class/Module Index

Quicksearch

- FFTW
- NArray
- NArrayScalar
- NMath
- NMatrix
- NMatrixLU
- NVector

No matching classes.

# NMatrix

------ NMatrix ------

### Constants

CLASS_DIMENSION

### Public Instance Methods

*(other) click to toggle source

    # File nmatrix.rb, line 35
    def *(other)
      case other
      when NMatrix
        NMatrix.mul_add( NArray.refer(self).newdim!(0),other.newdim(2), 1 )
        #NMatrix.mul_add( NArray.refer(self).newdim!(0),
        #                other.transpose(1,0).newdim!(2), 0 )
      when NVector
        NVector.mul_add( NArray.refer(self), other.newdim(1), 0 )
      when NArray
        if other.instance_of?(NArray)
          NMatrix.mul( NArray.refer(self), other.newdim(0,0) )
        else
          other.coerce_rev( self, :* )
        end
      when Numeric
        super
        #NMatrix.mul( NArray.refer(self), other )
      when Array
        NMatrix.mul( self, NArray[*other].newdim!(0,0) )
      else
        raise TypeError,"Illegal operation: NMatrix * %s" % other.class
      end
    end

**(n) click to toggle source

    # File nmatrix.rb, line 80
    def **(n)
      case n
      when Integer
        if n==0
          return 1.0
        elsif n<0
          m = self.inverse
          n = -n
        else
          m = self
        end
        (2..n).each{ m *= self }
        m
      else
        raise TypeError,"Illegal operation: NMatrix ** %s" % n.class
      end
    end

+(other) click to toggle source

    # File nmatrix.rb, line 11
    def +(other)
      case other
      when NMatrix
        return super(NArray.refer(other))
      when NArray
        unless other.instance_of?(NArray)
          return other.coerce_rev( self, :+ )
        end
      end
      raise TypeError,"Illegal operation: NMatrix + %s" % other.class
    end

-(other) click to toggle source

    # File nmatrix.rb, line 23
    def -(other)
      case other
      when NMatrix
        return super(NArray.refer(other))
      when NArray
        unless other.instance_of?(NArray)
          return other.coerce_rev( self, :- )
        end
      end
      raise TypeError,"Illegal operation: NMatrix - %s" % other.class
    end

/(other) click to toggle source

    # File nmatrix.rb, line 59
    def /(other)
      case other
      when NMatrix
        other.lu.solve(self)
      when NVector
        raise TypeError,"Illegal operation: NMatrix / %s" % other.class
      when NArray
        if other.instance_of?(NArray)
          NMatrix.div( NArray.refer(self), other.newdim(0,0) )
        else
          other.coerce_rev( self, :/ )
        end
      when Numeric
        NMatrix.div( NArray.refer(self), other )
      when Array
        NMatrix.div( self, NArray[*other].newdim!(0,0) )
      else
        raise TypeError,"Illegal operation: NMatrix / %s" % other.class
      end
    end

I() click to toggle source
Alias for: unit
coerce_rev(other,id) click to toggle source

    # File nmatrix.rb, line 98
    def coerce_rev(other,id)
      case id
      when :*
          if other.instance_of?(NArray)
            return NMatrix.mul( other.newdim(0,0), self )
          end
          if other.instance_of?(NArrayScalar)
            return NMatrix.mul( other.newdim(0), self )
          end
      when :/
          if other.instance_of?(NArray)
            return NMatrix.mul( other.newdim(0,0), self.inverse )
          end
          if other.instance_of?(NArrayScalar)
            return NMatrix.mul( other.newdim(0), self.inverse )
          end
      end
      raise TypeError,"Illegal operation: %s %s NMatrix" %
        [other.class, id.id2name]
    end

diagonal(val) click to toggle source

    # File nmatrix.rb, line 145
    def diagonal(val)
      self.dup.diagonal!(val)
    end

diagonal!(val=1) click to toggle source

    # File nmatrix.rb, line 131
    def diagonal!(val=1)
      shp = self.shape
      idx = NArray.int(shp[0..1].min).indgen! * (shp[0]+1)
      ref = reshape(shp[0]*shp[1],true)
      if val.kind_of?(Numeric)
        ref[idx,true] = val
      else
        val = NArray.to_na(val)
        raise ArgumentError, "must be 1-d array" if val.dim!=1
        ref[idx,true] = val.newdim!(-1)
      end
      self
    end

identity() click to toggle source
Alias for: unit
inverse() click to toggle source

    # File nmatrix.rb, line 119
    def inverse
      self.lu.solve( NMatrix.new(self.typecode, *self.shape).fill!(0).unit )
    end

transpose(*arg) click to toggle source

    # File nmatrix.rb, line 123
    def transpose(*arg)
      if arg.size==0
        super(1,0)
      else
        super
      end
    end

unit() click to toggle source

    # File nmatrix.rb, line 149
    def unit
      diagonal!
    end

Also aliased as: identity, I

[Validate]

Generated with the Darkfish Rdoc Generator 2.