【问题标题】:Filter MATLAB non-numerical array data based on criteria根据条件过滤 MATLAB 非数值数组数据
【发布时间】:2019-06-20 05:03:27
【问题描述】:

两个问题,一个相当简单的问题(至少看起来应该很简单)和一个可能需要更多工作的问题。随意为其中一个或两个做出贡献。

首先,我想根据一个条件基于现有字符串数组创建一个字符串数组。以双数组的类似操作为例:

>> nums = [ 1 2 1 2]

nums =

     1     2     1     2

>> big_nums = (nums == 2) .* nums

big_nums =

     0     2     0     2

我想对字符串数组做类似的事情,但是我不知道要使用什么函数:

>> sizes = ["XL" "L" "XL" "L"]

sizes = 

  1×4 string array

    "XL"    "L"    "XL"    "L"

>> large_sizes = (sizes == "L") .* sizes
Undefined operator '.*' for input arguments of type 'string'.

我希望输出是

large_sizes = 

  1×4 string array

    ""    "L"    ""    "L"

第二个问题。假设我有一个二维元胞数组。我想根据条件过滤数据:

>> data = {"winter", 1; "spring", 2; "summer", 3; "fall", 4}

data =

  4×2 cell array

    ["winter"]    [1]
    ["spring"]    [2]
    ["summer"]    [3]
    ["fall"  ]    [4]

>> nice_weather = ( (data(1,:) == "fall") + (data(1,:) == "spring") ) .* data
Error using  == 
Cell must be a cell array of character vectors.

我想要一个生成两个数组之一的代码: 好天气 =

  4×2 cell array

    [""]          [1]
    ["spring"]    [2]
    [""]          [3]
    ["fall"]      [4]

----- 或 -----

nice_weather =

  2×2 cell array

    ["spring"]    [2]
    ["fall"]      [4]

对于这个问题,我也愿意将数据分成多个数组(例如,一个数组用于字符串,一个数组用于数字)。

谢谢!

【问题讨论】:

    标签: arrays string matlab cell-array


    【解决方案1】:

    此解决方案使用 MATLAB 中的 strcmpi 函数(不需要工具箱)来比较两个字符串(不区分大小写)。

    一维元胞阵列:

    sizes = {'XL' 'L' 'XL' 'L'};    % Changed " to ' & used cell array
    idx = strcmpi(sizes,'L');       % Logical index
    sizelist = {sizes{idx}}
    

    或者您可以尝试类似
    sizes(~idx) = {"" ""} % manual just for example

    为此自动调整空白数量"",您可以像这样使用repmat sizes(~idx) = repmat({""},1,sum(~idx))

    输出:

    大小 = 1×4 元胞数组
    {[""]} {'L'} {[""]} {'L'}

    二维单元阵列:

    data = {'winter', 1; 'spring', 2; 'summer', 3; 'fall', 4};   % Changed " to '
    nicemo1 = 'spring';   
    nicemo2 = 'fall';
    
    idx = strcmpi(data(:,1),nicemo1) | strcmp(data(:,1),nicemo2);  % Obtain logical index
    data(idx,:)
    

    输出:

    ans = 2×2 元胞数组
    {'春天'} {[2]}
    {'秋天'} {[4]}


    使用 MATLAB R2018b 测试。
    还要注意像sizes 这样的变量,因为删除一个字母会掩盖一个有用的功能,size

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2017-02-12
      • 2018-10-08
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多