我有一个2D数组。在操作数组的x列之后,我创建了一个新的2D数组(data2),其中包含对x列的新更改(并且y列保持不变)。我现在想要将data2中的y值数组附加到新数组中,只要它的x值大于3或小于5.例如,如果2D数组是([2,3],[4,5] ,[3.5,6],[9,7]),我只想在我的新数组中得到5和6的y值,因为它们的x值在3到5之间。我被卡住了。请帮忙!
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('blah.txt') #blah.txt is a 2d array
c = (3*10)^8
x = c /((data[:,0])*10)
y = data[:,1]
data2 = np.array((x,y)).T
def new_yarray(data2):
yarray =[]
if data2[:,0] <= 5 or data2[:,0] >= 3:
np.append(data2[:,1])
print yarray
return yarray
答案 0 :(得分:1)
为了清楚起见,这是一个单行解决方案,分为几个步骤。
给定数组
>>> a
array([[ 2. , 3. ],
[ 4. , 5. ],
[ 3.5, 6. ],
[ 9. , 7. ]])
您可以使用x
找到np.where()
值大于3且小于5的元素的索引:
>>> np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5))
(array([1, 2]),)
其中a[:,0] = array([ 2. , 4. , 3.5, 9. ])
是所有x
值的数组。现在,您可以通过以下方式获取y
所有相应的3 < x < 5
值。
>>> a[np.where(np.logical_and(a[:,0] > 3,a[:,0] < 5))][:,1]
array([ 5., 6.])
答案 1 :(得分:0)
您可以使用此功能展平列表,然后根据值附加值。
def flatten_list(a, result=None):
""" Flattens a nested list. """
if result is None:
result = []
for x in a:
if isinstance(x, list):
flatten_list(x, result)
else:
result.append(x)
return result
lst = ([2,3], [4,5], [3.5,6], [9,7])
lst = flatten_list(lst)
new_lst = []
for i in lst:
if (float(i) > 3 and float(i) < 5):
new_lst.append(i)
print new_lst
在这种情况下,只有3.5和4大于3且小于5 ......