2012-12-06 7 views
5

以下のコードでは、ネストされたリストにデータを構築しています。 forループの後に私が望むのは、多次元のNumpy配列に可能な限りきれいにキャストすることです。しかし、私はそれで配列の変換を行うと、それは配列に外部のリストを変換するようだ。私が下向きに続行すると、dataPointsの形状が(100L,)となってしまいます...各リストが自分のデータであるリストの配列(明らかに私は(100,3)が必要でした)。私もnumpy.asanyarray()で騙してみましたが、うまくいかないようです。可能であれば、最初から3Dリストから3D配列を得たいです。もしそうでなければ、どのようにしてリストを配列を2次元配列にして、それらをすべて反復処理して変換する必要はありませんか?データのネストされたリストを多次元ナンプー配列に変換する

編集:処理が簡単になると、最初からデータを構造化するためのより良い方法にもオープンしています。しかし、それはシリアルポートを介して来ており、サイズはあらかじめわかっていません。

import numpy as np 
import time 

data = [] 
for _i in range(100): #build some list of lists 
    d = [np.random.rand(), np.random.rand(), np.random.rand()] 
    data.append([d,time.clock()]) 

dataArray = np.array(data) #now I have an array of lists of a list(of data) and a time 
dataPoints = dataArray[:,0] #this is the data in an array of lists 
+1

3Dネストされたリストはありません。リストとスカラーが混在しています。データは、[[0.434,0.34,0.22]、0.2]のようなオブジェクトを含むリストです。それは混在したオブジェクトなので、numpyはそれをどうしたらいいのかわかりません。 – Bitwise

+0

これは元のデータオブジェクトに当てはまります。そのため、そこから可能であるかどうかはわかりませんでした。しかし、dataPointsオブジェクトは浮動小数点数のリストで、2次元配列にも入ることはできません。 – Matt

答えて

4

dataPointsは2dリストではありません。まず最初に2dのリストに変換してください:

d=np.array(dataPoints.tolist()) 

ここでdは(100,3)です。

+0

はい、dataPointsはリストの配列です。これはうまくいきます、それはforループの後ろからの最善の方法でしょうか?私は配列に変換する(スライシング能力のために)、リストに戻って(正しい形状を得るために)、次に配列に戻る。 – Matt

+0

配列の変換とスライスをスキップします。後でスライスしているので、d(time.clock()を残してください)だけを追加してください。これはあなたが配列に変換できるリストのリストを提供します。あるいは、より良いことには、まず最初にnumpyの配列から始め、リストを使わないでください。 – Bitwise

+0

コードの他の部分にタイムスタンプが必要です。シリアルポートを介してデータが流入したときのサイズはわかりません。しかし、あなたのソリューションはこれまで私が見つけた最高のものです。 – Matt

-1

2次元配列は、あなたが望むものである場合:

from itertools import chain 
dataArray = np.array(list(chain(*data)),shape=(100,3)) 

あなたが一致する形状を取得するために、列/行の順序を変更する必要がありますので、私は、コードをうまくいきませんでした。

+0

これを正しく理解していれば、各リストで繰り返してnp.array()を実行するだけです。私はちょうど良い方法があるように感じると思います。 – Matt

+0

http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.array.htmlシェイプのパラメータをどこから取得しているのかわかりません。 –

関連する問題