Bug #12356
closedVector covector incorrect multiplication with another vector.
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) about 6 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) about 6 years ago
- Status changed from Assigned to Rejected
Thanks Jeremy for updating this issue. I double checked and never received the original email notification...
Vectordoes 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.