从numpy 2d数组中选择一个特定范围来绘制值

时间:2013-12-11 06:17:42

标签: python-2.7 numpy

例如使用如下所示的numpy数组

a =([1,2,3,4,5],[100,200,300,400,500])和x = a [0]和y = a [1]

我如何绘制xy,其中2< x< 4?

2 个答案:

答案 0 :(得分: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)是真值和假值的向量。只要x介于1.5和4.5之间,就是如此。 Numpy可以使用这样的布尔向量来仅选择那些值。我们将它用于第二轴。

对于第一个轴,如果我们使用0(如在a[0, (1.5 < a[0])*(a[0] < 4.5)]中),我们就会得到1.5到4.5之间的x - 值。如果我们使用了1,我们就会得到与该x范围相对应的y值。如果我们想要一个同时包含xy值的数组,我们可以使用:作为第一个轴,这意味着“全部”。

如果我们想要绘制这些值:

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

答案 1 :(得分: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()