2017-06-03 22 views
-3
mainArray=np.linspace(1,50,50) 
##group1 is first 10 elements of mainArray  
group1=np.array(1,2,3...10) 
group2=np.array(11,12,13...20) 
group3=np.array(21,22,23...30) 
. 
. 
group5=np.array(41,42,43,44,45,46,47,48,49,50) 
#i need to find standart deviation and mean value of these groups 
#like np.mean(group1) and np.std(group1) for all groups 
#then i have to calculate (group1-meanOfGroup1)/stdOfGroup1 for all groups 
#and append it to one list or array. 

我不知道,因为我的主要问题是我不能让一个循环,切片mainArray到组,并应用np.mean和np.std与循环我怎样才能解决这个问题。如何用循环切片数组并将操作应用于它们?

+0

例如'有效范围内的(X 0,LEN(值), 10):? –

+0

检查从[itertools(https://docs.python.org/3.6/library/itertools.html?highlight=itertools#module-itertools) – Cilyan

+0

检查numpy的的[基本切片(HTTPS的'grouper'配方:// docs.scipy.org/doc/numpy-1.12.0/reference/arrays.indexing.html)你有你需要的一切。 –

回答

1

Acording你最后的评论,你可以做这样的事情:

# create a list whith values [1,2, ..., 100] 
a = list(range(1, 101)) 
# Sum values by range of 3 values using list comprehension 
final = [sum(a[k:k+3]) for k in range(0, len(a), 3)] 
print(final) 

输出:

[6, 
15, 
24, 
33, 
42, 
51, 
60, 
... 
267, 
276, 
285, 
294, 
100] 

PS:最后的总和等于100因为groupping 1 to 100之间要素3个将值组他们像这样:1->3, 4->6, ..., 94->96, 97->99, and the final element will be only one number which is 100

编辑:

使用如下所示的list slicing执行上次编辑。

例如:

a = np.linspace(1,50,50) 
# unpacking groups 
group1, group2, group3, group4, group5 = [a[k:k+10] for k in range(0, len(a), 10)] 

# Applying: np.mean() to the groups 
print(np.mean(group1)) 
print(np.mean(group2)) 
print(np.mean(group3)) 
print(np.mean(group4)) 
print(np.mean(group5)) 

输出:

5.5 
15.5 
25.5 
35.5 
45.5 
+0

你上次更新不清楚。请添加您的实际问题,如果您可以添加一个简单的示例。 –

+0

Chauvenet_criterion的所有争论点都是数组。首先,它计算“degerler”数组,然后看看“degerler”元素是否<0.5,如果是这样,它会将我附加到cikarilcak_indexler列表中。问题是;这适用于整个“degerler”阵列。我想silce“degerler”数组然后做我的条件部分。例如:如果它们<0.5,则查找前25个元素,然后查找26到50. –

+0

那么您可以对它们进行分组,如果我们的答案是列表。尝试在你的问题中实现我的答案。除此之外,你最后的编辑还不够清楚。你最后的评论很清楚。而我目前的答案是为了它。 –

0
oc=np.linspace(1,100,100) 
ocmean= [np.mean(oc[k:k+25]) for k in range(0,len(oc),25)] 
ocstdev=[np.std(oc[k:k+25]) for k in range(0,len(oc),25)] 
## this 2 loops works, i got ocmean and ocstdev. 
d=[(oc[k:k+25]-ocmean[i])/ocstdev[i] for k in range(0,len(oc),25) for i in range(len(ocmean))] 
## This "d" doesnt gives what i want. It gives a list with 16*25 elements. 
+0

对于'group1':你可以这样:'[(k-ocmean [0] )/ ocstdev [0] for k in group1]' –

+0

这不能用组来完成,因为我不知道我需要多少组。我只有一个oc数组,并且有308个元素。我可以用我在上面写的代码在你的帮助下对他们进行分组和计算stdev和mean。但我不能做这个操作:对“oc”的前25个元素使用第一个mean和stdev, –

0
ocmean= [np.mean(oc[k:k+25]) for k in range(0,len(oc),25)] 
ocstdev=[np.std(oc[k:k+25]) for k in range(0,len(oc),25)]  
d=[] 

i=0 
k=0 
while i <len(ocmean): 
    m=(oc[k:k+25]-ocmean[i])/ocstdev[i] 
    i=i+1 
    k=k+25 
    d.append(m) 

解决这样

相关问题