2013-12-11 3 views

ответ

0

Вы можете попробовать маски на массивы: http://docs.scipy.org/doc/numpy/reference/routines.ma.html

Вот пример того, что я имею в виду:

import numpy as np 

x = np.array([1,2,3,4,5]) 
y = np.array([100,200,300,400,500]) 

# b contains true when corresponding value of x is outside 2 < x < 4 
b = np.ma.masked_outside(x, 2, 4).mask 

# x2 originates from x, but values 2 < x < 4 are stripped (according to the boolean variables contained in b), the same is done with y2 
x2 = x[~b] 
y2 = y[~b] 

print 'x2', x2 
print 'y2', y2 

Когда его только вы можете использовать только

import matplotlib.pyplot as plt 

plt.plot(x,y) 
plt.axis((2,4,None,None)) 
plt.show() 
+0

при построении лучшего использования вашего предложения использовать маскированные массивы для экономии памяти в некоторых случаях. это было действительно полезно, спасибо @Simon – firefly

0
>>> from numpy import array 
>>> a=array(([1,2,3,4,5], [100,200,300,400,500])) 
>>> a[:, (2 < a[0])*(a[0] < 4)] 
array([[ 3], 
     [300]]) 

Так что просто дает одну точку, давайте выберем другой диапазон:

>>> a[:, (1.5 < a[0])*(a[0] < 4.5)] 
array([[ 2, 3, 4], 
     [200, 300, 400]]) 

Чтобы объяснить, (1.5 < a[0])*(a[0] < 4.5) вектор истинных и ложных ценностей. Это верно, когда х составляет от 1,5 до 4,5. Numpy может использовать такие логические векторы для выбора только этих значений. Мы используем это для второй оси.

Для первой оси, если бы мы использовали 0 (как в a[0, (1.5 < a[0])*(a[0] < 4.5)]), мы получили бы только x -значения от 1,5 до 4,5. Если бы мы использовали 1, мы получили бы только значения y, соответствующие этому x-диапазону. Если нам нужен массив с значениями x и y, мы можем использовать : для первой оси, что означает «все».

Если мы хотим построить эти значения:

b = a[:, (1.5 < a[0])*(a[0] < 4.5)] 
import matplotlib.pyplot as plt 
p = plt.plot(b[0], b[1]) 
plt.show() 
+0

Это большое спасибо @ John1024, это идеальное решение для выборочной печати, чтобы сэкономить память – firefly

Смежные вопросы