Arrays 基于准则的MATLAB非数值阵列数据滤波

Arrays 基于准则的MATLAB非数值阵列数据滤波,arrays,string,matlab,cell-array,Arrays,String,Matlab,Cell Array,两个问题,一个相当简单的问题(至少看起来应该很简单)和一个可能需要更多工作的问题。请随意为其中一个或两个做出贡献 首先,我想基于现有的基于条件的字符串数组创建一个字符串数组。以双数组的类似操作为例: >> nums = [ 1 2 1 2] nums = 1 2 1 2 >> big_nums = (nums == 2) .* nums big_nums = 0 2 0 2 我想对字符串数组执

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

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

>> 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]
-----或-----

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

谢谢

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

1D单元阵列: 或者您可以尝试类似于
size(~idx)={“”}%手动,例如

要使其自动调整空白的数量,您可以这样使用
size(~idx)=repmat({“”},1,sum(~idx))

输出:

大小=1×4单元阵列
{[']}{'L'}{[']}{'L'}

2D单元阵列: 输出:

ans=2×2单元阵列
{'spring'}{[2]}
{'fall'}{[4]}


使用MATLAB R2018b进行测试。
还要注意变量,如
大小
,因为删除字母会掩盖一个有用的函数

nice_weather =

  2×2 cell array

    ["spring"]    [2]
    ["fall"]      [4]
sizes = {'XL' 'L' 'XL' 'L'};    % Changed " to ' & used cell array
idx = strcmpi(sizes,'L');       % Logical index
sizelist = {sizes{idx}}
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,:)