[英]Summing part of 2D array in python
我有一个二维数组。 操作数组的 x 列后,我创建了一个新的二维数组 (data2),其中对 x 列进行了新的更改(y 列保持不变)。 我现在想将 data2 中的 y 值数组附加到一个新数组中,仅当其 x 值大于 3 或小于 5 时。例如,如果二维数组是 ([2,3], [4,5] , [3.5,6], [9,7]),我只想要新数组中的 y 值 5 和 6,因为它们的 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
为了清楚起见,这里有一个单行解决方案,分为几个步骤。
给定一个数组
>>> a
array([[ 2. , 3. ],
[ 4. , 5. ],
[ 3.5, 6. ],
[ 9. , 7. ]])
您可以使用np.where()
找到x
值大于 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.])
您可以使用此函数来展平列表,然后根据其附加值。
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...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.