【问题标题】:Finding index of a value in Numpy matrix and add it with another value [duplicate]在 Numpy 矩阵中查找值的索引并将其与另一个值相加 [重复]
【发布时间】:2023-04-09 18:15:01
【问题描述】:

我想在矩阵中找到一个值的索引并将其添加到另一个值。我该怎么做?我做了如下但不起作用。 谢谢你的帮助。结果应该是 0。

import numpy as np

a=np.array([1, 2, 3, 4, 78, 55, 33 ,22])

index=np.where(a==3)

newnumber=index-2

【问题讨论】:

  • 您应该使用 numpy.argwhere 而不是 where 每当您对索引而不是值感兴趣时。
  • 你看起来像index吗?从中减去一个值是否有意义?您要更改“索引”还是值?你期望会发生什么? @dc_Bita98,argwhere 有什么帮助? argwhere 只是返回 where 元组的转置。
  • argwhere 返回一个数组,因此在 numpy 中添加/减去一个标量是可行的。是否有意义,这取决于@saber 想要做什么
  • arg 在哪里工作。谢谢

标签: python numpy where-clause


【解决方案1】:

您有两个问题 - 要减去的内容不明确,以及 where 结果的元组性质。

你的数组和测试:

In [47]: a=np.array([1, 2, 3, 4, 78, 55, 33 ,22])
In [48]: a==3
Out[48]: array([False, False,  True, False, False, False, False, False])

那个布尔掩码可以直接用来索引a

In [49]: a[a==3]
Out[49]: array([3])

并更改该元素的值:

In [50]: a[a==3] -= 2
In [51]: a
Out[51]: array([ 1,  2,  1,  4, 78, 55, 33, 22])

布尔掩码上的where 生成一个元组(重读np.where/nonzero 文档):

In [52]: np.where(Out[48])
Out[52]: (array([2]),)

我们不能从这个元组中减去一个值:

In [53]: np.where(Out[48])-2
Traceback (most recent call last):
  File "<ipython-input-53-fd4087ff32d9>", line 1, in <module>
    np.where(Out[48])-2
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'

我们可以从元组中提取数组,并从中减去一个值:

In [54]: np.where(Out[48])[0]-2
Out[54]: array([0])

这只是3 前两步的元素的索引。这真的是你想要的吗?

【讨论】:

  • 非常感谢。这是另一种方式,但 np.argwhere 也适用于我。
【解决方案2】:

你很亲密。您现在的解决方案不太有效,因为np.where 正在返回一个元组,其中包含一个索引满足条件的数组。为了让它工作,你需要做的就是用你喜欢的方法解包元组(可以是index, = np.where(a==3)index = np.where(a==3)[0]或其他)。

以后,我建议您在得到意外结果时检查您的变量。在这种情况下,print(index) 就足够了!

【讨论】:

  • 谢谢,np.argwhere() 对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多