#python #arrays #numpy #tuples
#python #массивы #numpy #кортежи
Вопрос:
У меня есть numpy массив кортежей и я хочу их отфильтровать, но, похоже, ничего не работает
possible_points = np.random.normal((0,0),0.01,size=(100,2))
possible_points = possible_points[possible_points > (0,0) and possible_points < (1,1)]
Это приводит к ошибке
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Я подозреваю, что проблема каким-то образом связана со следующим. Когда я делаю, например,
possible_points = [possible_points > (0,0)]
possible_points становится чем-то вроде
[array([[False, False],
[ True, False],
[ True, False],
[ True, True],
[ True, True],
[ True, True],
[ True, True],
[False, False],
[ True, False],
...
Насколько я понимаю, он должен возвращать True, если possible_points> (0,0) и False в противном случае, но он оценивает координату каждого кортежа индивидуально. Есть даже некоторые точки, которые становятся [True, False] . Если я сделаю
possible_points = possible_points[possible_points > (0,0)]
Я перестаю иметь кортежи и имею что-то вроде
array([3.36687201e-03, 7.97227921e-04, 3.44875252e-03, 8.79364101e-03,....])
И я подозреваю, что это то, что дает ValueErros .
Кто-нибудь может помочь мне понять, что я делаю неправильно, и помочь мне достичь моей цели?
Комментарии:
1. Каков ваш ожидаемый результат?
2. @Michaelsczesny, я хочу иметь элементы возможных точек, которые больше (0,0) и меньше (1,1)
Ответ №1:
IIUC, вы должны использовать amp;
оператор вместе со всеми столбцами (axis= 1), например:
import numpy as np
# set a seed for reproducibility
np.random.seed(42)
possible_points = np.random.normal((0, 0), 0.01, size=(100, 2))
# create the filtering mask
mask = ((possible_points > (0, 0)) amp; (possible_points < (1, 1))).all(axis=1)
# filter
possible_points = possible_points[mask]
print(possible_points)
Вывод
[[0.00647689 0.0152303 ]
[0.01579213 0.00767435]
[0.00738467 0.00171368]
[0.01031 0.0093128 ]
[0.00331263 0.00975545]
[0.00812526 0.0135624 ]
[0.00361396 0.01538037]
[0.00915402 0.00328751]
[0.00097078 0.00968645]
[0.0029612 0.00261055]
[0.01886186 0.00174578]
[0.0006023 0.02463242]
[0.01142823 0.00751933]
[0.00586857 0.02190456]
[0.0022746 0.01307143]
[0.00259883 0.00781823]
[0.00521942 0.00296985]
[0.00250493 0.00346448]
[0.01865775 0.00473833]
[0.00963376 0.00412781]
[0.0082206 0.01896793]
[0.00276691 0.00827183]
[0.00013002 0.01453534]
[0.00173181 0.00385317]]
Комментарии:
1. Да, это помогает, спасибо! Я приму ответ, когда смогу. Я также попытаюсь выяснить, почему это имеет смысл.