矩阵数据结构

发布于 2024-08-10 10:36:42 字数 73 浏览 3 评论 0原文

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

A simple 2 dimensional array allows swapping rows (or columns) in a matrix in O(1) time. Is there an efficient data structure that would allow swapping both rows and columns of a matrix in O(1) time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬 2024-08-17 10:36:42

您必须将矩阵存储为行列表或列列表。这给出了 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]

You have to store your matrix either as a list of rows or list of columns. Which gives either swapping of rows or swapping of columns in O(1).

However, you can add another layer on top of it to handle column order so that you can reorder columns in O(1).

So for every access you need to do:

x = data[row][colorder[col]] 

Swap rows as:

data[row1], data[row2] = data[row2], data[row1]

And swap columns as:

colorder[col1], colorder[col2] = colorder[c2], colorder[c1]
唐婉 2024-08-17 10:36:42

也许 numpy array 可以帮助你——它允许访问行和列,而且它相当高效(这是 scipy 的基本数据类型)

>>> 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]])

Maybe numpy array can help you -- it allows to access both rows and columns and it's fairly efficient (it's the basic data type for scipy)

>>> 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]])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文