当前位置: 首页 > 面试题库 >

由没有循环的2D索引数组索引2D numpy数组

闻人凯泽
2023-03-14
问题内容

我要寻找一个量化的方式来索引numpy.arraynumpy.array索引。

例如:

import numpy as np

a = np.array([[0,3,4],
              [5,6,0],
              [0,1,9]])

inds = np.array([[0,1],
                 [1,2],
                 [0,2]])

我想建立一个新的数组,以便该数组中的每一行(i)都是array的row(i)a,并由数组inds(i)的行索引。我想要的输出是:

array([[ 0.,  3.],   # a[0][:,[0,1]]
       [ 6.,  0.],   # a[1][:,[1,2]] 
       [ 0.,  9.]])  # a[2][:,[0,2]]

我可以通过循环来实现:

def loop_way(my_array, my_indices):
    new_array = np.empty(my_indices.shape)
    for i in xrange(len(my_indices)):
        new_array[i, :] = my_array[i][:, my_indices[i]]
    return new_array

但我正在寻找一种纯矢量化的解决方案。


问题答案:

使用索引数组对另一个数组进行索引时,每个索引数组的形状应与 输出 数组的形状匹配。您希望列索引匹配inds,并且您希望行索引匹配输出的行,例如:

array([[0, 0],
       [1, 1],
       [2, 2]])

由于广播的缘故,您只能使用上面的一列,因此您可以使用np.arange(3)[:,None]vertical,arange因为它会None插入新的轴:

>>> np.arange(3)[:, None]
array([[0],
       [1],
       [2]])

最后,一起:

>>> a[np.arange(3)[:,None], inds]
array([[0, 3],   # a[0,[0,1]]
       [6, 0],   # a[1,[1,2]] 
       [0, 9]])  # a[2,[0,2]]


 类似资料:
  • 问题内容: 我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列- 我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示: 到目前为止,我已经尝试过 但这给了我错误的输出。任何帮助请。 问题答案: 工作原理: 如果您在工作分配中使用 两个 numpy数组建立索引, 然后认为NumPy的作为过的各元件同时移动和中的每

  • 问题内容: 我有一个索引元组数组,我想用它从多维numpy数组中选取值, 理解只有在已知的情况下才有效。 有什么提示吗? 问题答案: 您可以将的转置版本转换为元组,然后为矢量化解决方案建立索引-

  • 问题内容: 我有一个奇怪的情况。 我有一个2D Numpy数组,x: 我有2个索引器-一个索引为行,一个索引为列。为了索引X,我必须执行以下操作: 不仅仅是: (失败:错误,无法通过(2,)广播(20,)) 我希望能够使用广播在一行中建立索引,因为这样可以使代码保持干净和可读性…而且,我对幕后的python并不太了解,但是据我了解它,它在一行中应该更快(我将使用相当大的数组)。 测试用例: 问题答

  • rank ▲ ✰ vote url 21 688 153 1320 url 在循环中获取索引(数组下标) 有人知道如何获取列表的索引值吗: ints = [8, 23, 45, 12, 78] 当我循环这个列表时如何获得它的索引下标? 如果像C或者PHP那样加入一个状态变量那就太不pythonic了. 最好的选择就是用内建函数enumerate for idx, val in enumerate

  • 我有一个2D按钮数组(按钮),它将生成一个5×5的按钮网格。我想在单击时获取单个按钮的索引(例如,(2,2)在中间),并通过创建Topcenter(这将是按钮的索引(x,y-1)或1,2,其中x和y是单击按钮的值)等整数变量,在3 x 3半径内找到围绕原始按钮的按钮的索引值。)然后,我可以向周围的按钮添加文本等。 这是一个可视化: 0,0|0,1|0,2|0,3|0,4 1,0 | 1,1 | 1

  • 我们可以使用for of循环访问数组元素: 如何修改此代码以访问当前索引?我想通过使用forEach和for-in来实现这一点。