当只有1行时,数组的形状和__len__返回4?

时间:2017-08-27 22:11:56

标签: python arrays csv numpy dimensions

在预先形成np.loadtxt()个CSV文件后,我会根据仅包含1行数据的文件看到以下结果。

dcsv: [ 45.29625588 -75.92420601  64.66075832   2.25      ]
dcsv shape: (4L,)
dcsv type:  float64
DataSet Length dcsv: 4 Rows

我不知道,为什么它认为有4行数据。它识别出有0行和2行或更多行,但只有1时返回4.

2行示例:

dcsv: [[ 45.29638366 -75.92428038  64.8255732    1.        ]
       [ 45.29638376 -75.92427927  64.82507261  13.        ]]
dcsv shape: (2L, 4L)
dcsv type:  float64
DataSet Length dcsv: 2 Rows

0行示例:

dcsv: []
dcsv shape: (0L,)
dcsv type:  float64
DataSet Length dcsv: 0 Rows
dcsv = []
dcsv = np.loadtxt('Start5SecondsSIMPy2JS.csv',delimiter=',',skiprows=0,usecols = (0,1,2,3)) 
print "dcsv:", dcsv
print "dcsv shape:", dcsv.shape
print "dcsv type: ", dcsv.dtype
print "DataSet Length dcsv:",dcsvLen,"Rows" 

非常感谢提供解决方案。

我需要使用0,1,2 ..... 10,000+行的解决方案。 np.atleast_2d& ndim产生1的结果,0行1行。我的解决方案是使用np.size,它返回0表示0行,4表示1行,这些方法中的任何一个允许我识别0行或1行的文件。任何数量的行> = 2将由np.ndarray.len处理。

2 个答案:

答案 0 :(得分:2)

出于某种原因,LibreSSL默认压缩长度为1的轴而不是保留输入的行列结构。您可以指定numpy.loadtxt来保留结构:

  

ndmin int 可选
  返回的数组至少包含 ndmin   尺寸。否则将挤压单维轴。法律   值:0(默认值),1或2。

答案 1 :(得分:1)

__len__的{​​{1}}方法返回第一维的长度。在您的情况下,形状为numpy.ndarray,因此(4L, )len将返回__len__

例如,如果要添加维度,请指定该数组应为atleast_2d

4