リストの単純なリストをnumpy配列に変換するにはどうすればよいですか?行は個別のサブリストであり、各行にはサブリストの要素が含まれています。
リストのリストにさまざまな要素数のリストが含まれている場合、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
を追加したことに注意してください。
とにかく...私はNumpyのエレガントな使用のためにhstack
アプローチを好みます。
次のように簡単です:
>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
[3, 4]])
繰り返しますが、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