extabgrad commented on PR #33925:
URL: https://github.com/apache/arrow/pull/33925#issuecomment-1452026817

   > This proposal currently states: `Elements in a fixed shape tensor 
extension array are stored in row-major/C-contiguous order.`. We can amend that 
to be more general. Could you state what left-to-right means? I assume it's 
equal to [TensorFlow's minor-to-major](https://www.tensorflow.org/xla/shapes).
   
   
   I can see it's confusing, since we are distinguishing between the order 
dimensions are indexed and the order they are stored. Left-to-right means new 
higher dimensions are added on the right, and right-to-left means they are 
added on the left.
   
   The minor_to_major field definition states that the left-most entry refers 
to the contiguous dimension in memory. The order of indexing is then defined by 
the numbers in this field, so [0 1 2] means that X(i,j,k) is indexing position 
i+(M*j)+(M*N*k). In typical parlance where i represents the row index, this is 
therefore column-major layout. A minor_to_major of [1 0 2] would therefore be a 
strict row-major layout so that j can represent the column index. But of course 
by row-major people typically mean [2 1 0], which means actually k is the 
column index, since the left-most dimension will be the highest (pages).
   
   If MATLAB data were stored in row-major format but still indexed 
left-to-right then i would become the column index and no permutation would be 
needed to translate between MATLAB data and other row-major formats. However, 
since everyone uses the row,column indexing convention and MATLAB indexes 
left-to-right, the data is therefore stored in column-major. If 'permutation' 
is an inherently left-to-right spec then it is [1 0 2] for MATLAB (swap the 
'first' two dimensions in memory). But if it's a right-to-left spec then it 
would be [0 2 1] (swap the 'last' two dimensions in memory).
   
   Hence the ambiguity - so I thought it best to check!
   
   I note that permutation is effectively the inverse of minor_to_major. The 
former is the memory order relative to the indexing order and the latter is the 
other way around.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to