如何在给定的numpy 2D数组中查找值介于-1和1之间的行?

时间:2019-02-06 14:55:13

标签: python numpy

我的np.array形状为(15,3)

final_vals = array([[  37,  -84, -143],
       [  29,    2,   -2],
       [ -18,   -2,    0],
       [  -3,    6,    0],
       [ 361,   -5,    2],
       [ -23,    4,    8],
       [   0,   -1,    0],
       [  -1,    1,    0],
       [  62,  181,   83],
       [-193,  -14,   -2],
       [  42, -154,  -92],
       [  16,  -13,    1],
       [ -10,   -3,    0],
       [-299,  244,  110],
       [ 223, -237, -110]])

试图查找元素值在-1和1之间的行。在ROW-6和ROW-7上方打印的数组中是目标/结果行。

我尝试过

result_idx = np.where(np.logical_and(final_vals>=-1, final_vals<=1))

返回,

result_idx = (array([ 2,  3,  6,  6,  6,  7,  7,  7, 11, 12], dtype=int64),
              array([2, 2, 0, 1, 2, 0, 1, 2, 2, 2], dtype=int64))

我希望我的程序仅返回行号

6 个答案:

答案 0 :(得分:2)

您可以获取所有元素的绝对值,并检查哪些行的元素小于或等于1。然后使用np.flatnonzero查找所有列满足条件的索引:

np.flatnonzero((np.abs(final_vals) <= 1).all(axis=1))

输出

array([6, 7], dtype=int64)

答案 1 :(得分:1)

根据您的方法执行此操作的另一种方法是找到每个元素的真值,然后对每一行使用numpy.all。然后numpy.where为您提供想要的东西。

mask = (final_vals <= 1) * (final_vals >= -1)
np.where(np.all(mask, axis=1))

答案 2 :(得分:1)

怎么样

np.where(np.all((-1<=final_vals) & (final_vals<=1),axis=1))

答案 3 :(得分:0)

您可以使用np.argwhere

r = np.logical_and(final_vals <= 1, final_vals >=-1)
result = np.argwhere(r.all(1)).flatten()

print(result)

输出

[6 7]

答案 4 :(得分:0)

另一种方法是使用pandas, 您可以使用以下代码实现该行:


df = pd.DataFrame(final_vals)
temp= ((df>=-1) & (df<=1 )).product(axis=1)
rows = temp[temp!=0].keys()
rows

首先,它检查-1和+1之间的数字,然后检查(轴= 1)行是否所有值都接受该条件。

,结果是: Int64Index([ 6, 7], dtype='int64')

答案 5 :(得分:0)

只是一个简单的列表理解:

app:showAsAction="always"