Python 矩阵数据结构

Python 矩阵数据结构,python,matrix,Python,Matrix,一个简单的二维数组允许在O(1)时间内交换矩阵中的行(或列)。是否有一种高效的数据结构,允许在O(1)时间内交换矩阵的行和列?您必须将矩阵存储为行列表或列列表。它给出了O(1)中的行交换或列交换 但是,您可以在其顶部添加另一层来处理列顺序,以便可以在O(1)中对列重新排序 因此,对于您需要执行的每个访问: x = data[row][colorder[col]] 将行交换为: data[row1], data[row2] = data[row2], data[row1] 并将列交换为: c

一个简单的二维数组允许在O(1)时间内交换矩阵中的行(或列)。是否有一种高效的数据结构,允许在O(1)时间内交换矩阵的行和列?

您必须将矩阵存储为行列表或列列表。它给出了O(1)中的行交换或列交换

但是,您可以在其顶部添加另一层来处理列顺序,以便可以在O(1)中对列重新排序

因此,对于您需要执行的每个访问:

x = data[row][colorder[col]] 
将行交换为:

data[row1], data[row2] = data[row2], data[row1]
并将列交换为:

colorder[col1], colorder[col2] = colorder[c2], colorder[c1]
也许可以帮助您——它允许访问行和列,而且相当高效(这是scipy的基本数据类型)


numpy有转置属性,
b.T
,可以直接交换列和行。可以使用Python的切片表示法,但它不允许在O(1)时间内交换列
>>> def f(x,y):
...         return 10*x+y
...
>>> b = fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> b[:,1]                                 # the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[1:3,:]                               # the second and third row of b
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])