【问题标题】:Pythonic way to get some rows of a matrix获取矩阵的某些行的 Pythonic 方法
【发布时间】:2010-11-09 11:00:23
【问题描述】:

我正在考虑几年前用 Python 编写的代码,在某些时候它必须按索引获取列表列表的一些元素。

我记得我做过这样的事情:

def getRows(m, row_indices):
    tmp = []
    for i in row_indices:
        tmp.append(m[i])
    return tmp

从那以后我学到了更多东西,我会使用这样的列表推导:

[m[i] for i in row_indices]

但我仍然想知道是否有更 Pythonic 的方式来做到这一点。有什么想法吗?

我也想知道 numpy 或任何其他数组库的替代方案。

【问题讨论】:

    标签: list coding-style filtering python


    【解决方案1】:

    NumPy 的切片语法值得一看。在链接页面中向下滚动,直到到达“索引、切片和迭代”。

    【讨论】:

    • 看起来很有希望,但没有像我搜索的那样:(
    • numpy 以何种方式不符合您的需求?要获得一行,您只需执行 M[i, :]。
    • 是的,现在我已经尝试过了,它可以工作,但是我在文档中没有找到它,所以我认为该功能丢失了......
    • 嗯...我在第 3.5 节停了下来,有趣的是在第 4.3.1 节
    【解决方案2】:

    这是一种明显的清洁方式。所以,我想说没有比这更 Pythonic 的了。

    【讨论】:

    • 我在想也许有更好的方法在访问器括号或类似的东西之间传递一系列索引:-/
    【解决方案3】:

    正如 Curt 所说,Numpy 似乎是一个很好的工具。这是一个例子,

    from numpy import *
    
    a = arange(16).reshape((4,4))
    b = a[:, [1,2]]
    c = a[[1,2], :]
    
    print a
    print b
    print c
    

    给予

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]
     [12 13 14 15]]
    [[ 1  2]
     [ 5  6]
     [ 9 10]
     [13 14]]
    [[ 4  5  6  7]
     [ 8  9 10 11]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2020-04-02
      • 2018-06-28
      • 2023-03-16
      相关资源
      最近更新 更多