2

matlab を使用してマトリックスに csv ファイルをロードしたいと考えています。

次のコードを使用しました。

formatSpec = ['%*f', repmat('%f',1,20)];

fid = fopen(filename);
X = textscan(fid, formatSpec, 'Delimiter', ',', 'CollectOutput', 1);
fclose(fid);
X = X{1};

csv ファイルには 1000 行と 21 列があります。ただし、生成された行列 X には 2000 列と 20 列があります。

'\t' や '\n' などのさまざまな区切り文字を使用してみましたが、変わりません。X を表示すると、正しい csv ファイルが表示されますが、2 行ごとに 0 の余分な行が表示されることに気付きました。

「HeaderLines」パラメータも追加してみました:

`X = textscan(fid, formatSpec1, 'Delimiter', '\n', 'CollectOutput', 1, 'HeaderLines', 1);`

しかし今回は、結果は空の行列です。

何か不足していますか?

編集:@horchler

「test.csv」ファイルは問題なく読み取ることができました。各行の終わりに余分なコンマはありません。Pythonスクリプトを使用してcsvファイルを生成しました。別のcsvファイルの行を読み取り、これらを変更し(一部を選択して算術演算を実行)、別のcsvファイルに新しい行を書き込みました。これを行うために、最初のcsvファイルの各要素をfloatに変換しました...

新しい編集: textscan のドキュメントをより注意深く読むと、入力ファイルがテキストファイルでも str でもなく、float を含むファイルであることが問題だと思います

編集:ファイルから3行

0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,2 1,-0.3834323,-1.92452324171,- 1.2453254094,0.43455627857,-0.24571121,0.4340657,1,1,0,0,0,0.3517396202,1,0,0,0.3558122164,0.2936975319,0.4105696144,0,1,0 -0.78676,-1.09767,0.765554578,0.76579043,0.76, 1,0,0,323124.235998,1,0,0,0,1,0,0,1,0,0,0,2

4

2 に答える 2