如何在不使用任何内置函数且不使用循环的情况下生成类似转置的矩阵?

时间:2018-03-28 15:12:56

标签: python numpy matrix

不完全像矩阵转置。我正在使用python并尝试使用矩阵转换,但我不能没有循环,我使用numpy,有没有任何解决方案只使用矩阵运算或矢量化函数?。

例如:

enter image description here

到此

enter image description here

2 个答案:

答案 0 :(得分:2)

看起来你要将此旋转180度然后转置。怎么样:

x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

>>> array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])

np.rot90(x, 2).T

>>> array([[9, 6, 3],
           [8, 5, 2],
           [7, 4, 1]])

答案 1 :(得分:1)

以下是仅使用索引的方式:

>>> import numpy as np
>>> a = np.array(['abcdefghi']).view('U1').reshape(3, 3)
>>> a
array([['a', 'b', 'c'],
       ['d', 'e', 'f'],
       ['g', 'h', 'i']], dtype='<U1')
>>> 
>>> a[[2,1,0],[[2],[1],[0]]]
array([['i', 'f', 'c'],
       ['h', 'e', 'b'],
       ['g', 'd', 'a']], dtype='<U1')

如果您不想对索引进行硬编码,则必须使用某种内置函数。 Python内置函数:

>>> a[list(reversed(range(3))), list(zip(reversed(range(3))))]
array([['i', 'f', 'c'],
       ['h', 'e', 'b'],
       ['g', 'd', 'a']], dtype='<U1')

或numpy

>>> a[np.ogrid[2:-1:-1,2:-1:-1][::-1]]
array([['i', 'f', 'c'],
       ['h', 'e', 'b'],
       ['g', 'd', 'a']], dtype='<U1')

请注意,所有这些方法都执行非延迟转置,这意味着生成的数组是C连续的。