web-dev-qa-db-ja.com

numpy配列へのリストのリスト

リストの単純なリストをnumpy配列に変換するにはどうすればよいですか?行は個別のサブリストであり、各行にはサブリストの要素が含まれています。

132
Richa Sachdev

リストのリストにさまざまな要素数のリストが含まれている場合、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)
142
Bastiaan
>>> 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アプローチを好みます。

27
2cynykyl

次のように簡単です:

>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
       [3, 4]])
21
Rik Poggi

繰り返しますが、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
5
armoured-moose