如何将简单的列表列表转换为numpy数组?行是单个子列表,每行包含子列表中的元素。
答案 0 :(得分:141)
如果您的列表列表包含具有不同数量元素的列表,则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)
答案 1 :(得分:81)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
答案 2 :(得分:27)
由于这是Google在将列表列表转换为Numpy数组时的最佳搜索,所以尽管问题是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。
答案 3 :(得分:21)
这很简单:
>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
[3, 4]])
答案 4 :(得分:5)
再次,在搜索了将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 :(得分:0)
我有一个长度相等的列表。即使如此,invoices
的答案对我来说也算不上。我有一个一维numpy数组,其元素是列表。如果遇到相同的问题,可以使用以下方法
使用Ignacio Vazquez-Abrams
numpy.vstack
答案 6 :(得分:-1)
只用熊猫
public partial class ViewController : UIViewController
{
static ErrorDataBase database;
public ViewController(IntPtr handle) : base(handle)
{
}
List<Error> errors;
public override void ViewDidLoad()
{
base.ViewDidLoad();
errors = new List<Error>
{
new Error()
{
Description="hufhdsuhufds"
}
,
new Error()
{
Description="Robot died and now we have to go and buy another robot"
}
,
new Error()
{
Description="Dead Robot revived!"
}
};
errorListView.Source = new TableSource(errors);
//errorListView.Source = await Database.GetItemsAsync();
errorListView.RowHeight = UITableView.AutomaticDimension;
errorListView.EstimatedRowHeight = 90f;
errorListView.ReloadData();
}
public static ErrorDataBase Database
{
get
{
if (database == null)
{
database = new ErrorDataBase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "SQLiteDB.db"));
}
return database;
}
}
}
这仅适用于列表列表
如果您有一个列表列表,则可能需要尝试以下方法
errorListView.Source = await Database.GetItemsAsync();