質問: np.arrayで(3,2000)のデータからnp.array(3,21)毎のarrayデータに取り出していくfor文の作り方がわからず困っています。 np.arrayのshapeが(3,2013)の場合で20で割り切れない場合には(3,20)ごとにわける場合while文が正しいでしょうか。 ``` # array(3,2000),取り出す値を(3,20)とすると arr=np.arange(6000).reshape(3,2000) data=[] #取り出せる数を除算で出す。 n=2000//20 for i in range(0,n,20): tempdata=arr[:,i:i+20] data.append(tempdata) data=np.array(data) print(data.shape) #(5, 3, 20)と出力されてしまう。 #以下追記 新しい方法を考えて試してみました。 data=[] while True: a=arr temp_data=a[:,1:21] data.append(temp_data) new_a=np.delete(a,[range(21)],axis=1) a=new_a if a.shape[1]<21: break #取り出しては行列を削除していく。21個ごとを取り出してdataに格納。aの列が21個以下になったらプログラムを停止。 #上の方法をやるとループしてしまっているみたいです。 ``` np.hsplitの方法も考えたのですが、列数が割りきれない場合にはsplitできない。ので他の方法を考えております。 a,b,c,d,.....=np.split(arr)という書き方以外があるのか。 すみませんが教えていただけますと幸いです。
回答: ``` import numpy as np arr=np.arange(6000).reshape(3,2000) data=[] span=21 # 長さの調整 for i in range(2000//span): temp = np.array([arr[0][i*span:(i+1)*span],arr[1][i*span:(i+1)*span],arr[2][i*span:(i+1)*span]]) data.append(temp) print(data[0]) ``` 冗長な感ありますが、こんな感じでどうでしょうか?