Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Matlab:x27的串联;n';带有来自'的数据的向量;n'。循环中的csv文件。在结构或表格中显示_Arrays_Matlab_Csv_Vector_Concatenation - Fatal编程技术网

Arrays Matlab:x27的串联;n';带有来自'的数据的向量;n'。循环中的csv文件。在结构或表格中显示

Arrays Matlab:x27的串联;n';带有来自'的数据的向量;n'。循环中的csv文件。在结构或表格中显示,arrays,matlab,csv,vector,concatenation,Arrays,Matlab,Csv,Vector,Concatenation,我知道有很多关于数组串联的帖子,但我找不到一篇可以用于我的案例的帖子 我有以下代码,可以读取混合数据类型的.csv文件(使用),并可以将一个.csv文件的元素存储到Nx1维度的向量中 basepath = 'Unzipped\Portfolio'; files = dir(fullfile(basepath, '*.csv')); % Pre-allocate data storage data = cell(size(files)); N=0; % Import each file usin

我知道有很多关于数组串联的帖子,但我找不到一篇可以用于我的案例的帖子

我有以下代码,可以读取混合数据类型的.csv文件(使用),并可以将一个.csv文件的元素存储到Nx1维度的向量中

basepath = 'Unzipped\Portfolio';
files = dir(fullfile(basepath, '*.csv'));

% Pre-allocate data storage
data = cell(size(files));
N=0;
% Import each file using it's filename
for k = 1:numel(files)

    data{k} = csvimport(fullfile(basepath, files(k).name)); %reads all the data

    [a, b]=size(data{k}); %the size of our data matrix
    Index{k}=a-1;         %Size of one .csv
    N=N+Index{k};         %Size of all .csv

    %for single .csv
    V1s{k}=cell(Index{k}, 1);
    V2s{k}=cell(Index{k}, 1);
    V3s{k}=cell(Index{k}, 1);
    V4s{k}=cell(Index{k}, 1);

    %for all .csv
    V1=cell(N,1);
    V2=cell(N,1);
    V3=cell(N,1);
    V4=cell(N,1);
end

for i = 1:numel(files)
    %Filling out every vector for a single .csv file and showing it up

    [pathstr,name,ext] = fileparts(files(i).name);
    V4s{i}(1:Index{i},1)=cellstr(name); %this vector contains only the name of the file repeatedly
    V1s{i}=data{i}(2:end, 15);
    V2s{i}=data{i}(2:end, 14);
    V3s{i}=data{i}(2:end, 9);
    C{i}=[V4s{i} V1s{i} V2s{i} V3s{i}] ;
    Table{i}=array2table(C{i}, 'VariableNames', {'V1s' 'V2s' 'V3s' 'V4s'});

    %For all .csv's
    %This is where my doubts are and I know this one won't produce me any results.
    V4=cat(1,V4s{:});
end
我的问题是,当我必须把所有的向量一个接一个地串联起来时。如果我有,比方说,三个就简单了

我可以使用类似于C=[V1;V2;V3]的东西。但我找不到办法让他们都这么做

我在考虑使用计数器,并开始为每个I建立索引,类似这样:

V1(a:b,1)=V1s{i}
值a和b为计数器。但我不知道怎么写

我想要一个巨大的向量Nx1,所有的V{I}都紧跟在下一组值之后


任何帮助都将不胜感激

如果使用{:}运算符,它将扩展单元格数组的所有内容作为输入参数。因此,如果我们以单元格数组的形式调用输入数据,我们可以执行以下操作来实现您想要的

V1 = cat(1, V1s{:});
这实际上与执行相同

V1 = [V1s{1}; V1s{2}; V1s{3}, ..., V1s{n}]

我不得不研究一个“替代”解决方案。我相信有更简单的方法。但我现在就要解决这个问题

我尝试了这种方法:使用计数器进行索引。为此,您必须定义这些计数器。因此,对于每个不同的V{i},您可以在一定范围内索引这些值

为了更好地理解这一点,您必须将以下部分添加到上面代码中的最后一个循环中。显然,您必须首先说明计数器在循环外等于零,这样它才能起作用

m=m+Index{i};
n=m-Index{i}+1;
V4(n:m,1)=V4s{i};
记住,你必须把它放在评论栏下面

% For all .csv's
% This is where my doubts are and I know this one won't produce me any results.
并在进入循环之前初始化m和n:

m=0;
n=0;

您可以将这种方法应用于索引非常大的向量或连接其中的几个向量

如果我正确理解了您的问题(读取多个csv文件并将其存储到N x 1向量中):

有多种方法可以循环浏览csv文件。通过文件名数组循环,或者您可以通过以下方式获取目录中的所有.csv文件:

files = dir('*.csv');
并循环浏览csv文件,如下所示:

for i=1:length(files)
   filename = files(i).name;
   ...
end

嗨,Suever!谢谢你帮我,伙计。我试过了,这就是Matlab所说的:将单元格内容分配给非单元格数组对象。结果很好。谢谢你的帮助。@AquilesPáez我曾试图让我的例子更一般化,我已经针对你的问题对它进行了更新,所以它现在可以工作了。谢谢你的贡献。有一件非常重要的事情我忘了提及,但我没有提及,那就是.csv文件包含混合数据。我相信csvread不能处理那种.csv文件。我将用这些信息编辑原始帖子。你可以使用
restrape(M,[],1])
而不是
restrape(M,[],1)
[]
可以使用一次,并将自动填充以匹配正确的元素数量。
for i=1:length(files)
   filename = files(i).name;
   ...
end