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

Python Numpy 2D数组索引

邓赤岩
2023-03-14
问题内容

我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列-

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

我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示:

array([[ 0,  0,  0],
   [ 0,  0,  0],
   [10,  0,  0],
   [10, 10,  0],
   [ 0,  0,  0],
   [10, 10, 10]])

到目前为止,我已经尝试过

    from numpy import*
    a = array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])
    b = zeros((6,3),dtype ='int32')
    b[a] = 10

但这给了我错误的输出。任何帮助请。


问题答案:
In [1]: import numpy as np
In [2]: a = np.array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])
In [3]: b = np.zeros((6,3), dtype='int32')

In [4]: b[a[:,0], a[:,1]] = 10

In [5]: b
Out[5]: 
array([[ 0,  0,  0],
       [ 0,  0,  0],
       [10,  0,  0],
       [10, 10,  0],
       [ 0,  0,  0],
       [10, 10, 10]])

工作原理:

如果您在工作分配中b使用 两个 numpy数组建立索引,

b[x, y] = z

然后认为NumPy的作为过的各元件同时移动x和中的每个元素y和中的每个元素z(我们称它们xvalyvalzval),并分配至b
[XVAL,利用yval]的值zval。当z为常数时,“z每次移动仅返回相同的值。

这就是我们想要的,与x作为第一列ay是第二列a。因此,选择x = a[:, 0]y = a[:, 1]

b[a[:,0], a[:,1]] = 10

为什么b[a] = 10不起作用

当你写b[a],认为NumPy的,如通过的每一个元素移动在创造一个新的数组a,(我们称之为每一个idx)和新的阵列中放置的价值b[idx]在的位置idxa

idx是中的值a。所以它是一个int32。 b形状为(6,3),b[idx]一行b形状为(3,)。例如,何时idx

In [37]: a[1,1]
Out[37]: 0

b[a[1,1]]

In [38]: b[a[1,1]]
Out[38]: array([0, 0, 0])

所以

In [33]: b[a].shape
Out[33]: (6, 2, 3)

因此,让我们再次重申:NumPy的是通过创建的每个元素移动在新的阵列a和新阵列中放置的价值b[idx]在的位置idxa。随着idx移动a,将创建形状为(6,2)的数组。但是由于b[idx]形状本身为(3,),因此在(6,2)形数组中的每个位置都放置了(3,)形值。结果是形状(6,2,3)的数组。

现在,当您进行类似

b[a] = 10

b[a]创建具有值的形状(6,2,3)的临时数组,然后执行分配。由于10是常数,因此此赋值将值10放置在(6,2,3)形数组中的每个位置。然后,将临时数组中的值重新分配给b。请参阅参考文档。因此,将(6,2,3)形数组中的值复制回(6,3)形b数组中。值彼此覆盖。但要点是您没有获得所需的任务。



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

  • 问题内容: 假设我们有以下js数组 是否有一个js内置函数或jQuery的一个,使用它可以搜索阵列 AR 的 VAL ? 谢谢 *_ _ _更新 _ _ * _ __** 根据 融合的 反应,我创建了这个原型 问题答案: 您可以创建一个哈希。

  • 我想在这个json数组中搜索特定的标题。但问题是,我想用正则表达式进行搜索。例如:sb搜索“ad”->函数应该返回前两个json字符串(Adjust和Adn)。 我不知道,现在设置一个javascript函数可以实现这一点。 一些想法?

  • 问题内容: 我要寻找一个量化的方式来索引的索引。 例如: 我想建立一个新的数组,以便该数组中的每一行(i)都是array的row(i),并由数组inds(i)的行索引。我想要的输出是: 我可以通过循环来实现: 但我正在寻找一种纯矢量化的解决方案。 问题答案: 使用索引数组对另一个数组进行索引时,每个索引数组的形状应与 输出 数组的形状匹配。您希望列索引匹配,并且您希望行索引匹配输出的行,例如: 由

  • 问题内容: 如何在Elasticsearch中按数组索引查询/过滤? 我有一个像这样的文件: 我想搜索 LIN [0] 是否为“ UP”并且 LIN [1]是否 存在。 谢谢。 问题答案: 这看起来可能像hack,但是可以肯定地起作用。首先,我们将令牌计数类型与多字段一起应用以捕获令牌数量作为字段。因此,映射将如下所示- 链接-http: //www.elasticsearch.org/guide

  • 问题内容: 我有一系列元素。我还有一个IndexSet,它指定需要将数组的哪些索引提取到新数组中。例如: 我正在寻找使用swift 函数的方法,但是还没有答案。我怎样才能做到这一点? 问题答案: 是递增整数的集合,因此可以 将 每个索引 映射 到相应的数组元素: 假定所有索引对于给定数组均有效。如果不能保证,则可以过滤索引(如@dfri正确标记):