是否有将 numpy.ndarray 转换为列表的有效方法?

Posted

技术标签:

【中文标题】是否有将 numpy.ndarray 转换为列表的有效方法?【英文标题】:Is there an efficient method to convert numpy.ndarray to list? 【发布时间】:2012-04-10 04:41:25 【问题描述】:

我有一个表格 Y 的数组(这只是一个例子,我在这个表格中有大量数据)。该数组是通过使用numpy的vstack和hstack形成的(即我不想改变我获得这个数组的方式,因为我已经通过一些复杂的操作获得了它):

 Y=array([[1,  1,2],
        [1,  2,0],
        [-1, 3,1],
        [-1, 2,2]])
y=[1,1,-1,-1]
Y1=list(Y)

现在我将数据输入到 libsvm 函数中,该库希望输入参数为字典、列表或元组形式。因此,相同的代码是:

prob=svm_problem(y, Y1)

上面的函数抛出一个错误,'xi 应该是一个字典、列表或元组'。我知道的另一种方法是将 Y 迭代地转换为列表。这样做的方式是:

Y1=[] 
for i in range(0, Y.shape[0]):
      Y1.append(list(Y[i])

上述方法效果很好,但考虑到我拥有的大量数据,速度很慢。有没有更快的方法来完成同样的事情?

【问题讨论】:

【参考方案1】:
>>> Y.tolist()
[[1, 1, 2], [1, 2, 0], [-1, 3, 1], [-1, 2, 2]]

我不确定这是否会比大型二维数组快得多。将这样的数组转换为简单的列表列表本质上是一种低效的操作——这就是你首先使用 NumPy 的原因。

【讨论】:

以上是关于是否有将 numpy.ndarray 转换为列表的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 dtype <U30 的 numpy ndarray 转换为 float

将 numpy.ndarray 转换为小写

Python数组及其基础操作Numpy ndarray

无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)错误

为啥它会自动转换为 numpy.ndarray?

是否有将 List<int> 转换为 Double 的 Dart 函数?