我的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))
我希望我的程序仅返回行号
答案 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"