【问题标题】:Why does numpy.where() give two arrays with an array of more than 1 row as input?为什么 numpy.where() 给出两个数组,其中一个数组超过 1 行作为输入?
【发布时间】:2021-03-24 18:43:38
【问题描述】:

我了解np.where() 的输出,输入为单行数组。但是,当使用两行数组作为输入时,我不明白为什么 b 的输出是两个数组。

a[b] 的输出是有意义的。

a = np.array([[1, 2, 3],[4,5,6]])
print(a)
print ('Indices of elements <4')
b = np.where(a<4)
print(b) 
print(a[b])

b 的输出:

(array([0, 0, 0], dtype=int64), array([0, 1, 2], dtype=int64))

a[b] 的输出:

[1 2 3]

【问题讨论】:

  • 您认为输出应该是什么?为什么?无论如何,Stack Overflow 不是为图书馆的设计决策辩护的正确场所。
  • 因为我习惯了R,我真的不明白numpy的输出。每个人都是从初学者开始的吧?我很困惑,因为你总是在我提出问题后发表一些令人沮丧的言论。我是一名统计学家,试图学习新事物,因为我没有接受过大数据时代的教育,我正在努力追赶。
  • 通过多维索引,元组的使用与列表有很大不同。它为每个维度提供一个值。 a[(i,j)]a[np.array([i,j])] 不同。 b 是一个数组元组,因此可以直接在a[b] 表达式中使用。与 np.argwhere(a&lt;4) 比较,它返回相同的数字,但作为 (3,2) 数组。
  • 我明白了。谢谢!很高兴知道。我尝试了 3 行。图案很清晰。 b 中的第一个数组对应行号,b 中的第二个数组对应列号。

标签: python arrays list numpy


【解决方案1】:

我们需要两个索引来访问二维数组中的每个元素。例如。我和 j。 因此,如果满足条件的二维数组的索引是(i1,j1), (i2,j2) and (i3,j3),条件为a&lt;4,那么np.where() 将返回一个元组的元组,格式类似于((i1,i2,i3),(j1,j2,j3))

【讨论】:

  • 我明白了。谢谢。我期待一个两行的数组。因此感到困惑。现在说得通了。第一个输出数组似乎指示索引所指的行。
  • @hehe 如果答案对您有帮助,请考虑验证答案是否正确!
猜你喜欢
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2023-03-28
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多