Ответ 1
>>> a[ (3>a[:,1]) & (a[:,1]>-6) ]
array([[ 1, 2],
[ 3, -5]])
Пусть массив:
a =np.array([[1,2],[3,-5],[6,-15],[10,7]])
чтобы получить строки с элементами второго столбца выше -6, можно сделать
>>> a[a[:,1]>-6]
array([[ 1, 2],
[ 3, -5],
[10, 7]])
но как получить строки со вторым элементом между -6; 3? Я пробовал:
>>> a[3>a[:,1]>-6]
а также (что вызывает ошибку):
>>> np.ma.masked_inside(a,-6,3)
который дает:
masked_array(data =
[[-- --]
[-- --]
[6 -15]
[10 7]],
mask =
[[ True True]
[ True True]
[False False]
[False False]],
fill_value = 999999)
но результат не слишком ясен.
Спасибо JP
>>> a[ (3>a[:,1]) & (a[:,1]>-6) ]
array([[ 1, 2],
[ 3, -5]])
np.ma.masked_inside(a, -6, 3)
создаст объект MaskedArray
, где значения между -6 и 3 маскируются (то есть, помечены как инвалид). Другими словами, вы фильтруете out значения между -6 и 3.
Вместо этого вы должны использовать np.ma.masked_outside(a, -6, 3)
:
>>> a = np.array([[1,2],[3,-5],[6,-15],[10,2]])
>>> np.ma.masked_outside(a,-6,3)
>>> masked_array(data =
[[1 2]
[3 -5]
[-- --]
[-- 2]],
mask =
[[False False]
[False False]
[ True True]
[ True False]],
fill_value = 999999)
Обратите внимание, что с помощью этой функции вы отфильтровываете весь массив, элемент за элементом, который не является тем, что вы хотите.
Подход индексирования, приведенный в другом решении, на сегодняшний день является самым простым и понятным.