Project

General

Profile

Actions

Bug #12356

closed

Vector covector incorrect multiplication with another vector.

Added by edmorte (Rafael Silva) almost 8 years ago. Updated over 4 years ago.

Status:
Rejected
Target version:
-
ruby -v:
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]
[ruby-core:75394]

Description

Version 2.2.4

v1 = Vector[2,3,4]
v2 = Vector[4,5,6]
v1.covector.row_size #1
v1.covector.column_size #3
v2.covector.row_size #1
v2.covector.column_size #3

Vector does not have distinction between row and column, there's no column vector notion in the language.

v1 * v2.covector #Matrix[[8,10,12],[12,15,18],[16,20,24]]

Should be illegal. But works like if v2.covector is transposed / column vector which it's clearly not.

v1.covector * v2.covector #ExceptionForMatrix::ErrDimensionMismatch: Matrix dimension mismatch

Expected

v1 * v2 #ExceptionForMatrix::ErrOperationNotDefined: Operation(*) can't be defined: Vector op Vector

No comments, see my observation below.

v1.covector * v2 #Vector[47]
#Again covector treated like transposed / column vector.

Personal observation: Terrible choice to represent Vector like an Array, Vector should be a shortcut to Matrix.

Updated by jeremyevans0 (Jeremy Evans) over 4 years ago

  • Status changed from Open to Assigned
  • Assignee set to marcandre (Marc-Andre Lafortune)

I don't think this is a bug, but I'll let marcandre make the determination. Vector can't be multipled with Vector, you get an error. You can multiple a Vector by a Matrix and vice-versa by design, and Vector#covector returns a Matrix. You can multiple a Matrix by a Matrix only if the column_count of the receiver is the row count of the argument.

Whether Vector is good design or bad design I'm not going to speculate on. However, you could consider using NMatrix (https://rubygems.org/gems/nmatrix), as that represents vectors as matrices.

Updated by marcandre (Marc-Andre Lafortune) over 4 years ago

  • Status changed from Assigned to Rejected

Thanks Jeremy for updating this issue. I double checked and never received the original email notification...

Vector does not have distinction between row and column, there's no column vector notion in the language.

Actually, in the library Vector is a column vector. You can see this for example with:

Vector[1, 2].to_matrix # => Matrix[[1], [2]]

So I believe that it is correct that v.covector * v or v * v.covector returns some result while other combinations should raise.

I'll close this but will reopen if there's more discussion to be had.

Actions

Also available in: Atom PDF

Like0
Like0Like0