奇怪的numpy.array行为-嵌套列表的列表转换错误,或者我不明白它是如何工作的?

时间:2019-08-16 16:58:35

标签: python numpy numpy-ndarray

我写了一些程序来测试numpy.array嵌套列表转换是否有效,我发现它的工作应尽可能简单。

我试图在一个真实的例子(机器学习数组)上做同样的事情,但是它停止了工作。由于数据太大,我无法显示全部数据。

让我们假设我有x个嵌套列表:

x是float列表的列表:

type(x), type(x[0]), type(x[0][0]), type(x[0][0][0])

是:

(<class 'list'>, <class 'list'>, <class 'list'>, <class 'float'>)

所有元素均正确输入:

type(x)
<class 'list'>
set(type(a) for a in x)
{<class 'list'>}
set(type(b) for a in x for b in a)
{<class 'list'>}
set(type(c) for a in x for b in a for c in b)
{<class 'float'>}

我这样做:

xa = numpy.array(x)
type(xa), type(xa[0]), type(xa[0][0]), type(xa[0][0][0])

,这种转换会产生奇怪的结果

(<class 'numpy.ndarray'>, <class 'list'>, <class 'list'>, <class 'float'>)

为什么关闭?为什么有些嵌套列表没有转换?

(<class 'numpy.ndarray'>, <class 'numpy.ndarray'>, <class 'numpy.ndarray'>, <class 'numpy.float64'>)

为什么numpy.array转换失败或未完成-您能否给出一些提示?

我测试了这段代码,它适用于手动创建的y变量:

y = [[[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]], [[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]]
type(y), type(y[0]), type(y[0][0]), type(y[0][0][0])
(<class 'list'>, <class 'list'>, <class 'list'>, <class 'float'>)
ya = numpy.array(y)
type(ya), type(ya[0]), type(ya[0][0]), type(ya[0][0][0])
(<class 'numpy.ndarray'>, <class 'numpy.ndarray'>, <class 'numpy.ndarray'>, <class 'numpy.float64'>)

y与x完全相同,但是对于x,转换不起作用。可能是什么问题?

如何转换x或修复它以允许像y那样进行转换,因为两者都是相同的嵌套列表?

0 个答案:

没有答案