При проверке условий числовых массивов я обычно заканчиваю с использованием numpy.where
, только с условием в качестве аргументов, он возвращает индексы массива:
i1 = numpy.where(r[:,0]>0.0) # i1 has now the row indices where column 0 > 0.0
i2 = numpy.where(r[:,0]<=0.0)
r1 = numpy.take(r,i1[0],0) # take slices of r along axis 0
v1 = numpy.take(v,i1[0],0)
r2 = numpy.take(r,i2[0],0)
v2 = numpy.take(v,i2[0],0)
Несколько короче, просто используйте сжатиев этом случае, который сочетает в себе:
larger = r[:,0]>0.0
r1 = numpy.compress(larger,r,0)
Я не знаю, если это быстрее, но он использует только массивы, без промежуточных списков
РЕДАКТИРОВАТЬ: вы также можете посмотреть назамаскированные массивы, если вы хотите работать с r, v напрямую