【问题标题】:Index of multidimensional array多维数组的索引
【发布时间】:2013-11-22 08:30:23
【问题描述】:

我在使用多维向量作为多维向量的索引时遇到问题。假设我有 C.ndim == idx.shape[0],那么我希望 C[idx] 给我一个元素。请允许我用一个简单的例子来解释:

A = arange(0,10)
B = 10+A
C = array([A.T, B.T])
C = C.T
idx = array([3,1])

现在,C[3] 给了我第三行,而 C[1] 给了我第一行。 C[idx] 然后会给我两行的 vstack。但是,我需要得到 C[3,1]。我将如何实现给定的数组 C, idx?

/编辑: 一个答案建议元组(idx)。这项工作非常适合单个 idx。但: 让我们更进一步:假设 INDICES 是一个向量,我在其中垂直堆叠了形状为 idx 的数组。 tuple(INDICES) 会给我一个长元组,所以 C[tuple(INDICES)] 不起作用。有没有一种干净的方法可以做到这一点,还是我需要遍历行?

【问题讨论】:

    标签: python numpy multidimensional-array indexing scipy


    【解决方案1】:

    如果您将idx 转换为tuple,它将被解释为基本索引而非高级索引:

    >>> C[3,1]
    13
    >>> C[tuple(idx)]
    13
    

    对于向量情况:

    >>> idx
    array([[3, 1],
           [7, 0]])
    >>> C[3,1], C[7,0]
    (13, 7)
    >>> C[tuple(idx.T)]
    array([13,  7])
    >>> C[idx[:,0], idx[:,1]]
    array([13,  7])
    

    【讨论】:

    • 完美。让我们更进一步:假设 INDICES 是一个向量,我在其中垂直堆叠了形状为 idx 的数组。 tuple(INDICES) 会给我一个长元组,所以 C[tuple(INDICES)] 不起作用。有没有一种干净的方法可以做到这一点,还是我需要遍历行?
    • C[INDICES[0], INDICES[1]] 会按照您的描述进行操作,C[tuple(INDICES.T)] 也会这样做。
    • 我打算推荐tuple(INDICES.T)。不过,它不需要是C[INDICES[:,0], INDICES[:,1]] 吗?还是我像往常一样在脑海中错误地转换了一些东西?
    • 是的,我认为你是对的,我的两个答案肯定不一致,第二个似乎是对的。
    • 正如 Jaime 所说,每一 都与一组索引一致。所以 INCIDES[0],... 是正确的。但是, tuple(INDICES.T) 给了我一个包含 2 个元素的元组,其中包含 N 个项目(其中 N 是行数)。 C[tuple(INCIDES.T) 然后给出 IndexError: arrays used as indices must be of integer (or boolean) type 另一方面, tuple(x) 给了我 N 个“子元组”的 2 个索引,到目前为止是正确的(我猜)。但是, C[tuple(x)] 会给我 IndexError: too many indices.
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多