将字符串的csv转换为矩阵
Converting csv of strings into a matrix
我刚开始使用 Octave(Matlab 没钱:/)而且我也是 Stack Overflow 的新手,所以请原谅我在约定方面犯的任何错误。
问题:我有一个像这样的字符串 csv:
Bob Marley,Kobe Bryant,Michael Jackson,Kevin Hart
我想把它做成一个 1 列矩阵(我需要它在一个矩阵中,以便我可以将它与其他矩阵中的数据结合起来)。
我的方法:我试过 textread
,但这给了我一个元胞数组。我尝试使用 cell2mat
将生成的元胞数组转换为矩阵,但我怀疑我不能这样做,因为我的字符串长度不同。
如果需要任何其他信息,请告诉我。
考虑到您所在的目录中有一个文件 "strings.csv",其中包含您在问题中提到的内容,您的代码应该如下所示:
fid=fopen('strings.csv');
A=textscan(fid,'%s','delimiter',',');
A=A{1};
A=cellfun(@(x) string(x),A,'uni',0);
B=[A{:}];
您可以使用 char
数组:
fid = fopen('strings.csv');
A = textscan(fid, '%s', 'delimiter', ',');
B = char(A{:})
[rows, cols] = size(B)
输出如下:
B =
Bob Marley
Kobe Bryant
Michael Jackson
Kevin Hart
rows = 4
cols = 15
如您所见,B
的列数是所有 "strings" 的最大长度(Michael Jackson,15)。所有其他 "strings" 都会附加空格。
如果你的数据就这么简单,你可以一行完成。使用 fileread
将所有数据吞入,然后 strsplit
分离元素,并使用 '
转置将其转换为列向量。
x = strsplit(fileread('myfile.txt'), ',')'
如果您的数据中逗号周围有空格,请升级到 regexp
。
x = regexp(fileread('myfile.txt'), ' *, *', 'split')
我刚开始使用 Octave(Matlab 没钱:/)而且我也是 Stack Overflow 的新手,所以请原谅我在约定方面犯的任何错误。
问题:我有一个像这样的字符串 csv:
Bob Marley,Kobe Bryant,Michael Jackson,Kevin Hart
我想把它做成一个 1 列矩阵(我需要它在一个矩阵中,以便我可以将它与其他矩阵中的数据结合起来)。
我的方法:我试过 textread
,但这给了我一个元胞数组。我尝试使用 cell2mat
将生成的元胞数组转换为矩阵,但我怀疑我不能这样做,因为我的字符串长度不同。
如果需要任何其他信息,请告诉我。
考虑到您所在的目录中有一个文件 "strings.csv",其中包含您在问题中提到的内容,您的代码应该如下所示:
fid=fopen('strings.csv');
A=textscan(fid,'%s','delimiter',',');
A=A{1};
A=cellfun(@(x) string(x),A,'uni',0);
B=[A{:}];
您可以使用 char
数组:
fid = fopen('strings.csv');
A = textscan(fid, '%s', 'delimiter', ',');
B = char(A{:})
[rows, cols] = size(B)
输出如下:
B =
Bob Marley
Kobe Bryant
Michael Jackson
Kevin Hart
rows = 4
cols = 15
如您所见,B
的列数是所有 "strings" 的最大长度(Michael Jackson,15)。所有其他 "strings" 都会附加空格。
如果你的数据就这么简单,你可以一行完成。使用 fileread
将所有数据吞入,然后 strsplit
分离元素,并使用 '
转置将其转换为列向量。
x = strsplit(fileread('myfile.txt'), ',')'
如果您的数据中逗号周围有空格,请升级到 regexp
。
x = regexp(fileread('myfile.txt'), ' *, *', 'split')