У меня большой массив (несколько миллионов элементов), и мне нужно выделить небольшое количество из них (несколько сотен) на основе нескольких различных критериев.В настоящее время я использую np.where вдоль линий:
for threshold in np.arange(0,1,.1):
x=np.random.random(5000000)
y=np.random.random(5000000)
z=np.random.random(5000000)
inds=np.where((x < threshold) & (y > threshold) & (z > threshold) & (z < threshold+0.1))
DoSomeJunk(a[inds], b[inds], c[inds])
, а затем позже использую ipts, чтобы вытащить правильные точки из различных массивов.Однако я получаю MemoryError в этой строке np.where.Я видел на нескольких других связанных сообщениях, что np.where может быть боровом памяти и копированием данных.
Означает ли наличие множителя & там, что данные копируются несколько раз?Есть ли более эффективный способ нарезать данные таким образом, чтобы он занимал меньше памяти и сохранял список нужных мне индексов, чтобы впоследствии я мог использовать один и тот же срез в нескольких местах?
Обратите внимание, что этот пример, который я разместил, на самом деле не генерирует ошибку, но структура похожа на мою.