【问题标题】:How to select different columns from each row in nd-array in Python/numpy?如何从 Python/numpy 的 nd-array 中的每一行中选择不同的列?
【发布时间】:2018-03-07 15:18:16
【问题描述】:

假设我有 3 x 2 矩阵

A = np.arange(3*2).reshape(3,2)

并希望通过索引数组选择元素

I = [0, 1, 0]

得到

[[0],[3],[4]]

我该怎么做?

这样写

A[:,[0,1,0]]

提供完全不同的东西(什么?)

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    您可以做的是传递第一个维度值的iterable,以及第二个维度的iterable(例如列表)。比如:

    I = [0, 1, 0]
    A[range(len(I)),I]
    

    这会产生:

    >>> A[range(len(I)),I]
    array([0, 3, 4])
    

    如果您希望将其作为二维数组,您可以使用额外的整形:

    >>> A[range(len(I)),I].reshape(-1,1)
    array([[0],
           [3],
           [4]])
    
    A[:,[0,1,0]]
    

    提供完全不同的东西(什么?)

    它创建一个矩阵,其中 first 列是A 的第一列 (0),second 列是第二列 (1) A 的列,第三列又是A 的第一列 (0)。

    【讨论】:

    • 我在numpy 中有没有像minmax 等聚合语义的函数?
    • np.minnp.max
    • 是的,但是做选择,比如np.select(A, I, axis=1, keepdims=True)?
    • AFAIK 不是,np.choose 可能是最接近的,但它适用于第一个维度,因此您可以先转置,然后再进行处理。
    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 2018-05-13
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多