stdlib/matrix.rb
#
# Returns a section of the matrix.  The parameters are either:
# *  start_row, nrows, start_col, ncols; OR
# *  row_range, col_range
#
#   Matrix.diagonal(9, 5, -3).minor(0..1, 0..2)
#     => 9 0 0
#        0 5 0
#
# Like Array#[], negative indices count backward from the end of the
# row or column (-1 is the last element). Returns nil if the starting
# row or column is greater than row_count or column_count respectively.
#
Returns a section of the matrix.



Like Array#[], negative indices count backward from the end of the
row or column (-1 is the last element). Returns nil if the starting
row or column is greater than row_count or column_count respectively.
Returns a section of the matrix . Like Array# [] negative indices count backward from the end of the row or column ( - 1 is the last element ) . Returns nil if the starting row or column is greater than row_count or column_count respectively .
def minor(*param)
    case param.size
    when 2
      row_range, col_range = param
      from_row = row_range.first
      from_row += row_count if from_row < 0
      to_row = row_range.end
      to_row += row_count if to_row < 0
      to_row += 1 unless row_range.exclude_end?
      size_row = to_row - from_row
      from_col = col_range.first
      from_col += column_count if from_col < 0
      to_col = col_range.end
      to_col += column_count if to_col < 0
      to_col += 1 unless col_range.exclude_end?
      size_col = to_col - from_col
    when 4
      from_row, size_row, from_col, size_col = param
      return nil if size_row < 0 || size_col < 0
      from_row += row_count if from_row < 0
      from_col += column_count if from_col < 0
    else
      raise ArgumentError, param.inspect
    end
    return nil if from_row > row_count || from_col > column_count || from_row < 0 || from_col < 0
    rows = @rows[from_row, size_row].collect{|row|
      row[from_col, size_col]
    }
    new_matrix rows, [column_count - from_col, size_col].min
  end
def minor ( * param ) case param . size when 2 row_range , col_range = param from_row = row_range . first from_row += row_count if from_row < 0 to_row = row_range . end to_row += row_count if to_row < 0 to_row += 1 unless row_range . exclude_end? size_row = to_row - from_row from_col = col_range . first from_col += column_count if from_col < 0 to_col = col_range . end to_col += column_count if to_col < 0 to_col += 1 unless col_range . exclude_end? size_col = to_col - from_col when 4 from_row , size_row , from_col , size_col = param return nil if size_row < 0 || size_col < 0 from_row += row_count if from_row < 0 from_col += column_count if from_col < 0 else raise ArgumentError , param . inspect end return nil if from_row > row_count || from_col > column_count || from_row < 0 || from_col < 0 rows = @rows [ from_row , size_row ] . collect { | row | row [ from_col , size_col ] } new_matrix rows , [ column_count - from_col , size_col ] . min end
Returns a section of the matrix.
Returns a section of the matrix .
param
<not_specific>