【问题标题】:produce a table/array with string column and numbers生成带有字符串列和数字的表/数组
【发布时间】:2013-08-10 23:48:38
【问题描述】:

我有一个字符串的单元结构,例如。

my_cell = 'apple.csv' 'banana.csv' 'orange.csv'

从数据集中读取

我有一个数据向量。

my_number = [1 2 3]

我想输出一个表/数组,其中第一列有名称,第二列有一些数字。

my_output=['apple' 1; 'banana' 2; 'orange' 3]

【问题讨论】:

    标签: string matlab cell


    【解决方案1】:

    我认为这只有在你的向量与你的单元格大小相同时才有效

    my_output=cell(length(my_cell),2)
    
    for i=1:length(my_cell)
    my_output(i,:)=[my_cell(i),my_number(i)];
    end
    

    【讨论】:

      【解决方案2】:

      为了在同一个数组中混合字符串和数字,你的“表”需要是一个元胞数组:

      my_cell = {'apple.csv','banana.csv','orange.csv'}; % data
      my_number = [1 2 3]; % data
      
      my_output = cell(length(my_cell),2); % initialize output cell array
      [my_output{:,1}] = deal(my_cell{:}); % asign first column of cell array
      my_number_cell = num2cell(my_number); % convert vector to cell
      [my_output{:,2}] = deal(my_number_cell{:}); % asign first column of cell array
      

      给予

      >> disp(my_output)
          'apple.csv'     [1]
          'banana.csv'    [2]
          'orange.csv'    [3]
      

      【讨论】:

        【解决方案3】:

        除了元胞数组,您还可以使用dataset(),它经过一些初始开销后比前者轻,并且还允许您使用.(点)语法访问其字段,即' struct' 语法:

        % Example input
        my_cell   = repmat({'apple.csv'; 'banana.csv'; 'orange.csv'} ,1000,1);
        my_number = repmat([1; 2; 3],1000,1);
        
        % a is a cell array, b is a dataset
        a = [my_cell(:), num2cell(my_number(:))]
        b = dataset({my_cell(:), 'name'},{my_number(:),'number'})
        

        显示的变量:

        a = 
            'apple.csv'     [1]
            'banana.csv'    [2]
            'orange.csv'    [3]
        b = 
            name                number
            'apple.csv'         1     
            'banana.csv'        2     
            'orange.csv'        3     
        

        索引dataset()的替代方法:

        b(:,1)
        ans = 
            name            
            'apple.csv'     
            'banana.csv'    
            'orange.csv'    
        
        b.name
        ans = 
            'apple.csv'
            'banana.csv'
            'orange.csv'
        
        b(:,'number')
        ans = 
            number
            1     
            2     
            3 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-18
          • 2018-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          相关资源
          最近更新 更多