【发布时间】:2013-07-15 12:38:08
【问题描述】:
我有一个大的 csv 文件(大约 100 万行),其中包含具有以下结构的选项数据(内容已更改):
secid, date, days, delta, impl_volatility, impl_strike, impl_premium, dispersion, cp_flag, ticker, index_flag, industry_group
100000, 02/05/1986, 60, -80, 0.270556, 74.2511, 5.2415, 0.021514, C, ASC, 0, 481
100000, 03/05/1986, 30, -40, 0.251556, 74.2571, 6.2415, 0.025524, P, ASC, 0, 481
我已经使用以下方法成功导入了一个测试文件:
ftest = fopen('test.csv');
C = textscan(ftest,'%f %s %f %f %f %f %f %f %s %s %f %f','Headerlines',1,'Delimiter',',');
fclose(ftest);
但是,C 是一个元胞数组,这使得在 matlab 中处理文件的内容变得更加困难。将它作为“常规”数组会更容易(请原谅我不知道正确的命名法,我刚开始使用 matlab)。
如果我输出 C,我得到:
Columns 1 through 6
[2x1 double] {2x1 cell} [2x1 double] [2x1 double] [2x1 double] [2x1 double]
Columns 7 through 12
[2x1 double] [2x1 double] {2x1 cell} {2x1 cell} [2x1 double] [2x1 double]
所以在 C 的元胞数组中,有数组和元胞数组 - 用于数字的数组和用于字符串的元胞数组。如果我尝试检查元素 (1,2),我必须使用 C{1}(2),但如果我想检查元素 (2,2),我必须使用 C{2}{2}。理想情况下,我想同时访问 C(1,2) 和 C(2,2)。 问题是,我该怎么做?
我已经搜索了解决方案并找到了 cells2mat,但它只有在所有内容都是数字的情况下才有效(我认为)。我找到了这个解决方案:Convert cell array of cell arrays to matrix of matrices,但是 horzcat 检索到一个错误,我相信这可能是由于同样的问题而发生的。
提前感谢您的宝贵时间。
【问题讨论】:
-
元胞数组是可以存储不同类型值的数组。在这里,您有一个存储数字和字符串列的元胞数组。 This question 假设您所拥有的只是数值,因此元胞数组确实是多余的,并且它可以转换为矩阵,这更容易操作。但是,当您涉及字符串时,您期望得到什么?
标签: arrays matlab csv cell textscan