如何在 Numpy Python 中使用布尔值在元组中索引 ndarray?

问题描述

我想使用 ndarraytuple 中索引 boolean mask,如下所示

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]

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

解决方法

所以看起来mask和lateral[0]的大小是不同的。由于掩码是数组中每个元素之间的差异,因此当lateral[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)