【问题标题】:The shape and __len__ of an array return 4 when there is only 1 row?当只有 1 行时,数组的 shape 和 __len__ 返回 4?
【发布时间】:2018-02-05 04:18:47
【问题描述】:

在对 CSV 文件执行 np.loadtxt() 后,我看到以下基于仅包含 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 行的文件。 np.ndarray.len 将处理任何数量 >= 2 的行。

【问题讨论】:

  • 如果您希望形状为 (1, 4),请使用参数 ndmin=2

标签: python arrays csv numpy dimensions


【解决方案1】:

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

ndminint可选
返回的数组至少有 ndmin 方面。否则一维轴将被挤压。合法的 值:0(默认)、1 或 2。

【讨论】:

    【解决方案2】:

    numpy.ndarray__len__ 方法返回第一个维度的长度。在您的情况下,形状为(4L, ),因此len__len__ 将返回4

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

    >>> dcsv = np.atleast_2d(dcsv)
    

    【讨论】:

    • 0 行产生:dcsv 形状:(1L,0L)和数据集长度 dcsv:1 行,而 1 行产生:dcsv 形状:(1L,4L)和数据集长度 dcsv:1 行。有什么想法吗?
    • 我认为这是因为 0 行被解释为np.array([[]])。在这种情况下,您对shape#rows 有何期望?从理论上讲,它给出了预期的输出:找到 1 行,0 列.... :-]
    猜你喜欢
    • 2021-10-16
    • 2012-08-22
    • 2017-11-26
    • 1970-01-01
    • 2015-09-03
    • 2017-07-19
    • 2013-11-15
    • 2017-12-19
    • 1970-01-01
    相关资源
    最近更新 更多