回答:
リストのリストに要素の数が異なるリストが含まれている場合、Ignacio Vazquez-Abramsの答えは機能しません。代わりに、少なくとも3つのオプションがあります。
1)配列の配列を作成します。
x=[[1,2],[1,2,3],[1]]
y=numpy.array([numpy.array(xi) for xi in x])
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'numpy.ndarray'>
2)リストの配列を作成します。
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
3)最初にリストの長さを等しくします:
x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x])
y
>>>array([[1, 2, None],
>>> [1, 2, 3],
>>> [1, None, None]], dtype=object)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
これは、リストのリストをNumpy配列に変換するためのGoogleでのトップ検索なので、4歳の質問にもかかわらず、以下を提供します。
>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]
この方法を最初に考えたとき、それはとてもシンプルすぎるので自分自身に非常に満足していました。ただし、リストのより大きなリストでタイミングを調整した後、これを行う方が実際には高速です。
>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]
@Bastiaanの回答#1は単一の連続リストを作成しないことに注意してくださいconcatenate
。したがって、を追加しました。
とにかく...私hstack
はそれがNumpyのエレガントな使用のためのアプローチを好みます。
繰り返しますが、NレベルのネストされたリストをN次元配列に変換する問題を検索した後、何も見つかりませんでした。
import numpy as np
new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3
[...[...[...]]]
部分は必要ないことに注意してください。を呼び出すだけでnp.array
、でndmin=number-of-list-layers
。(私の場合ndmin=number-of-list-layers-minus-1
、何らかの理由で必要でしたが、それ以外の場合は追加のレイヤーを作成しました-調査する必要があります)
np.array
これらの最も深いリストを数の多い配列に変換するのではなく、単に「ラップ」することです。
同じ長さのリストのリストがありました。それでもIgnacio Vazquez-Abrams
'の答えはうまくいきませんでした。要素がリストである1次元のnumpy配列を取得しました。同じ問題に直面した場合は、以下の方法を使用できます
使用する numpy.vstack
import numpy as np
np_array = np.empty((0,4), dtype='float')
for i in range(10)
row_data = ... # get row_data as list
np_array = np.vstack((np_array, np.array(row_data)))