输出是数组还是方括号时的区别

时间:2018-12-06 21:31:29

标签: python arrays numpy

我试图了解这两个输出之间的区别(如果有)。

array([array([203., 164.,  87., ...,   1.,   1.,   0.]),
       array([39., 44., 40., ..., 40., 30., 21.]),
       array([152., 144., 133., ...,  36.,  36.,  36.])], dtype=object)

array([[ 0.,  0.,  5., ...,  0.,  0.,  0.],
       [ 0.,  0.,  0., ..., 10.,  0.,  0.],
       [ 0.,  0.,  0., ..., 16.,  9.,  0.],
       ...,
       [ 0.,  0.,  1., ...,  6.,  0.,  0.],
       [ 0.,  0.,  2., ..., 12.,  0.,  0.],
       [ 0.,  0., 10., ..., 12.,  1.,  0.]])

对我来说,这两个结构都是2D阵列。但是由于某种原因,其中之一的打印方式有所不同。

我正在尝试将第一个结构提供给复杂的函数(svm.SVC.fit)。第二个有效,但第一个无效:

  

设置具有序列的数组元素

尽管它们似乎与我完全一样..

1 个答案:

答案 0 :(得分:1)

正如我在评论中指出的那样,它们不是两个二维数组。第一个是形状为(N, )的一维数组。您正在尝试创建具有可变长度子数组的numpy数组。发生这种情况时,numpy将数组的类型强制为object并使其成为一维。 您应该不惜一切代价避免这种情况,因为这样做一开始就消除了使用numpy的许多好处。

一种常见的方法是填充子数组,使它们都具有统一的长度,但是无论做什么,都不要对锯齿状的数组使用numpy