【问题标题】:How to index ndarray in tuple using boolean with Numpy Python?如何在 Numpy Python 中使用布尔值在元组中索引 ndarray?
【发布时间】:2021-01-20 05:03:20
【问题描述】:

我想在tuple 中使用boolean mask 索引ndarray,如下所示

import numpy as np
n_max = 5
list_no = np.arange ( 0, n_max )
lateral = np.tril_indices ( n_max, -1 )
mask= np.diff ( lateral [0].astype ( int ) )
mask [-1] = 1
Expected=lateral[mask!= 0]

但是,当执行Expected=lateral[mask!= 0]这一行时, 编译器返回错误

TypeError:只有整数标量数组可以转换为标量 索引

Expected=
0 = {ndarray: (4,)} [1 2 3 4]
1 = {ndarray: (4,)} [0 1 2 3]

我可以知道我哪里做错了吗?

【问题讨论】:

  • 你能告诉我们发生在哪里吗? (回溯)
  • @hpaulj,我已经编辑了帖子,但是为了回答你的问题,错误出现在最后一行lateral[mask!-0]
  • 告诉我们lateral。你甚至可以展示整个事情!了解信息。好的答案显示结果。
  • 这是一个二维坐标。如果满足布尔条件,我想提取某些二维坐标。我希望这能回答你的问题@hpaulj
  • 没有。从文档中我看到它是一个元组。我们用一个简单的数字索引一个元组。布尔数组适用于数组,而不是元组。

标签: numpy indexing boolean-operations


【解决方案1】:

所以看起来面具和横向[0]的大小是不同的。由于掩码是数组中每个元素之间的差异,因此当横向 [0] 的大小为 n 时,它的大小为 n-1。您可能希望改为附加到掩码数组。 此外,由于lateral 是一个元组,因此您需要在应用掩码之前对元组进行索引。

你可能需要这样的东西:

import numpy as np
n_max = 5
list_no = np.arange(0, n_max)
lateral = np.tril_indices(n_max, -1)
mask = np.diff(lateral[0].astype(int))
mask = np.append(mask, 1)
expected_0 = lateral[0][mask != 0]
print(expected_0)
expected_1 = lateral[1][mask != 0]
print(expected_1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2015-01-26
    • 2021-02-07
    • 2018-02-16
    • 2018-05-20
    相关资源
    最近更新 更多