2016-10-29 8 views
3

私はPythonを学んでいますが、オブジェクトを扱うときに少し問題があります。私は解決策を模索しようとしましたが、どこにも行きませんでしたので、皆さんにお尋ねします。オブジェクトを配列に変換する方法

オブジェクトの最初のX列を取得したいのですが、すべての行に同じサイズがないため、できません。

私は、このオブジェクト持っている:

array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
     [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
     [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
     [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 

をそして、私はこのような何かを取得したいと思います:私はこれを解決するために何ができ

array([[45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [50, 51, 52, 55]]) 

を?あなたの助けのための おかげ

アルバロ

+1

あなたは 'dtype = object'の1次元4要素配列を持っています。各要素はリストです。これは基本的にリストのリストと同じです。通常、それをそのように扱うことが最善です。配列ラッパーはそれほど多くを加えず、物事を遅らせるかもしれません。 – hpaulj

答えて

3

どう

について
import numpy as np 
data = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
       [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
       [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
       [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 
newData = np.array([d[:4] for d in data]) 
+0

ありがとう、それは動作します! あなたはそれをすることなくそれを行う方法があると思いますか?例えば、配列関数などのようなもの? –

0
次のようにあなたはまた、行数をspecifiyすることができ、より汎用的な解決策が必要になる場合があり

import numpy as np 

arr = np.array([[45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 52], 
     [45, 45, 45, 50, 51, 50, 50, 50, 51, 50, 51, 52, 55], 
     [45, 45, 45, 50, 51, 50, 52, 50, 50, 50, 51], 
     [50, 51, 52, 55, 50, 52, 50, 50, 50, 51, 50, 51]], dtype=object) 

def slice_array(arr, num_cols, num_rows=None): 
    if num_rows: 
     return np.array([row[:num_cols] for row in arr[:num_rows]]) 
    return np.array([row[:num_cols] for row in arr]) 

res1 = slice_array(arr, 4, 2) 
res2 = slice_array(arr, 4) # Like in your case 

結果:

>>> res1 
array([[45, 45, 45, 50], 
     [45, 45, 45, 50]]) 
>>> res2 
array([[45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [45, 45, 45, 50], 
     [50, 51, 52, 55]]) 
関連する問題