Bug #12356

Vector covector incorrect multiplication with another vector.

Added by edmorte (Rafael Silva) over 4 years ago. Updated about 1 year ago.

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


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 #Matrix8,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


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) about 1 year ago

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

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 (, as that represents vectors as matrices.

Updated by marcandre (Marc-Andre Lafortune) about 1 year 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.

Also available in: Atom PDF