簡體   English   中英

從帶有標題的 tsv 文件加載 PDL 矩陣無法按預期工作

[英]Loading PDL matrix from tsv file with header does not work as expected

我有一個帶有列名的 tsv 文件 foo.tsv:“a”、“b”、“c”、“d”。 我想讀取這個文件並將其內容加載到 PDL 矩陣。 文件 foo.tsv 如下所示:

a   b   c   d
1   6   7   4
2   7   6   10
3   8   5   6
4   9   4   8
5   10  3   7

我使用此代碼將文件讀取到矩陣並打印:

use PDL::Core qw(pdl);
use PDL::IO::CSV ':all';

# Header set to the first row following https://github.com/kmx/pdl-io-csv
# Sep_char set to the tab
my $data = rcsv2D('foo.tsv', {text2bad => 1, header => 1, sep_char => "\t"});

print $data;

打印的矩陣是錯誤的,因為它缺少標題后帶有數字的第一行:

[
 [ 2  3  4  5]
 [ 7  8  9 10]
 [ 6  5  4  3]
 [10  6  8  7]
]

我將標題值更改為“自動”,它應該跳過所有列中具有非數字值的行:

my $data = rcsv2D('foo.tsv', {text2bad => 1, header => 'auto', sep_char => "\t"});

現在我收到警告,但矩陣看起來沒問題:

Argument "auto" isn't numeric in foreach loop entry at C:/sw/pdl/perl/vendor/lib/PDL/IO/CSV.pm line 335, <DATA> line 207.
[
 [ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [ 7  6  5  4  3]
 [ 4 10  6  8  7]
]

我不明白為什么結果矩陣會有所不同,為什么我通過將 header 設置為帶有header => 1的第一行而得到錯誤的結果?

這似乎是一個在 0.011 中修復的錯誤。

0.011   2019/12/04
        - fix: header option eats extra line #2
        - fix: cpantesters failure on long-double perls

使用 0.011,您的代碼運行良好。

use strict;
use warnings;

use PDL::IO::CSV ':all';

my $data = rcsv2D('foo.tsv', {text2bad => 1, header => 1, sep_char => "\t"});
print $data;
$ perl -e'
   CORE::say join "\t", @$_
      for
         [qw( a  b  c  d  )],
         #    -- -- -- --
         [qw(  1  6  7  4 )],
         [qw(  2  7  6 10 )],
         [qw(  3  8  5  6 )],
         [qw(  4  9  4  8 )],
         [qw(  5 10  3  7 )];
' >foo.tsv

$ perl a.pl

[
 [ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [ 7  6  5  4  3]
 [ 4 10  6  8  7]
]

(請注意, rcsv2D不支持header=>'auto' ,並且在發出您報告的警告后被視為header=>0 。)

我發現我有一個0.010版本的PDL::IO::CSV Changes文件看來,這個版本有一個錯誤,因為標題占用了額外的行。 這已在 0.011 版中修復:

0.011   2019/12/04
        - fix: header option eats extra line #2
        - fix: cpantesters failure on long-double perls

編輯:我獨立找到了一個解決方案,但池上的答案更有用,因為它解釋了header => 'auto'行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM