2017-09-25 12 views
0

私は、スライス、行、および列を持つ3Dマトリックスを持っています。それは720スライスを持っています。ループ内の3Dマトリックスで特定のスライスを合計するにはどうすればよいですか?

最初の20個のスライスを合計し、次に20個のスライスを合計したいとします。

私はすでにかなり扱いにくいコードを持っています。私はこれを達成するためにループを利用することができますどのように

質問

これまでの私のコード

# (bin_mask_arrs is already in a for loop. Shape is (720,461,421) 
bin_mask_arrs[i]= np.nanmean(bin_mask_arrs[i]) 

a1 = (np.sum(bin_mask_arrs[:24,1,1]))            
a2 = (np.sum(bin_mask_arrs[25:48,1,1])) 
a3 = (np.sum(bin_mask_arrs[49:72,1,1])) 
# ...... 
a30 = (np.sum(bin_mask_arrs[697:720,1,1])) 

# and then put everything together: 

list1 = (a1,a2,a3,.....,a30) 

答えて

0

の代わりに、A1、A3、A2 ... A30、のようなリストの内包表記を使用します。また、あなたのスライスが間違っている

a = [np.sum(bin_mask_arrs[x*24:(x+1)*24,1,1]) for x in range(30)] 
# 'list1' in your code is same as 'a' 

0:24、24:48、48:72 ... 696:720

+0

ああ、あなたの権利を求めているものであることを願っています!完璧に動作します、ありがとう:-) – Hannah

0

ノンループコードを書いているので、解決策はかなりストレートです報酬。

list1 = [np.sum(bin_mask_arrs[i * 24:i * 24 + 24, 1, 1]) for i in range(30)] 

これはあなたが

+0

ありがとうございます!これは完全に動作します:-) – Hannah

関連する問題