Issue #6852 has been updated by marcandre (Marc-Andre Lafortune).


Anonymous wrote:
> > A 3x0 matrix corresponds to [[], [], []], but there is no correspondence for a 0x3 matrix. So strictly speaking, `[[], [], []].transpose` has no valid answer, but returning `[]` is more useful than raising I believe.
>  
>  It would be interesting to see code that found returning [] to be
>  useful. As in, code that expected to operate on the transposed result.

I can imagine code that wants to iterate on all elements, but going through columns first. E.g:

    # Instead of
    exams.each_with_index do |exam, i|
       # do something with exam and grades[i]
    end
    # Using transpose (or zip) is nicer:
    [exams, grades].transpose.each do |exam, grade|
      # do the same with exam and grade
    end

The later would fail for an empty set of exams and grades

Note that `[[],[],[]].transpose` is consistent with `[].zip([], [])`
----------------------------------------
Feature #6852: [].transpose should behave specially
https://bugs.ruby-lang.org/issues/6852#change-28829

Author: boris_stitnicky (Boris Stitnicky)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0


p = [1, 2, 3]
q = [4, 5, 6]
[p, q].transpose
# => [[1, 4], [2, 5], [3, 6]]
As expected, 2 x 3 vector was converted into 3 x 2.

[p].transpose
# => [[1], [2], [3]]
As expected, 1 x 3 => 3 x 1.

[].transpose
# => []
Unexpected, 0 x 3 did not become 3 x 0: [[], [], []]

In other words, when [] is the receiver, transpose has no way to know
what kind of ** 2 dimensional ** object is it - whether 0 x 3, 0 x 4, 0 x 1
or perhaps 0 x 0. #transpose should not assume it is 0 x 0. It should raise,
or warn, or complain, or require argument for this case, in short, it should
behave differently than today.


-- 
http://bugs.ruby-lang.org/