标签: cell-array

如何在MATLAB中搜索单元格数组中的字符串?

假设我有单元格数组

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)

如果我想找到索引,我该怎么办'KU'

string matlab cell-array

100
推荐指数
7
解决办法
17万
查看次数

如何检测单元阵列中的空单元格?

如何检测单元阵列中的空单元格?我知道删除空单元格的命令是a(1) = [],但我似乎无法让MATLAB自动检测哪些单元格为空.

背景:我预先分配了一个单元格数组a=cell(1,53).然后我使用if exist(filename(i))和textscan来检查文件,并将其读入.结果,当filename(i)不存在时,会产生一个空单元格,然后我们移动到下一个文件.

当我读完所有文件后,我想删除空单元格a.我试过了if a(i)==[]

matlab cell-array is-empty

34
推荐指数
1
解决办法
9万
查看次数

如何在单元格数组中用"char"类型替换所有"字符串"类型?

上下文

在R2016b中,除了通常的char数据类型之外,MATLAB还引入了一种新的字符串数据类型.到目前为止,这么好,但它现在给了我很多我正在使用的JSONlab工具箱的问题.

例如,在R2015b中,loadjson返回1x3单元字符数组:

dd = loadjson('["Titi", "Toto", "Tata"]')

dd = 

    'Titi'    'Toto'    'Tata'
Run Code Online (Sandbox Code Playgroud)

但是在R2018a中,loadjson返回1x3 字符串数组:

dd = loadjson('["Titi", "Toto", "Tata"]')

dd =

  1×3 cell array

    {["Titi"]}    {["Toto"]}    {["Tata"]}
Run Code Online (Sandbox Code Playgroud)

问题

为了不必在任何地方更改我的代码,我想修补loadjson例程以替换string它可能返回char类型的所有类型.例如,在以下单元格数组中:

test = { 'hello', "world", 0.3; 'how', 'are', "you"}

test =

  2×3 cell array

    {'hello'}    {["world"]}    {[0.3000]}
    {'how'  }    {'are'    }    {["you" ]}
Run Code Online (Sandbox Code Playgroud)

我想替换所有字符串:

cellfun(@isstring, test)

ans =

  2×3 logical array …
Run Code Online (Sandbox Code Playgroud)

arrays string matlab type-conversion cell-array

25
推荐指数
4
解决办法
1305
查看次数

使用花括号和括号访问单元格元素之间的区别

使用括号()和花括号访问单元格数组中的元素有什么区别{}

例如,我试图使用 cell{4} = []cell(4) = [].在第一种情况下,它将第4 元素设置为[],但在第二种情况下,它消灭了单元格元素,即将单元格元素数量减少1.

matlab cell-array

23
推荐指数
1
解决办法
2万
查看次数

将新元素添加到现有单元格数组的末尾

正如标题已经提到的那样,如何在现有单元阵列的末尾添加一个新的单元阵列1x1,让我们称之为Q单元阵列1x3256?

matlab cell-array

23
推荐指数
2
解决办法
4万
查看次数


为什么单元格数组中的尾随逗号有效Matlab语法?

今天我很惊讶地发现了这一点

A = {1,2,3}
Run Code Online (Sandbox Code Playgroud)

B = {1,2,3,}
Run Code Online (Sandbox Code Playgroud)

在MATLAB中都是有效的语法.我原以为第二个语句会产生错误.尽我所知,他们生成相同的单元格数组(all([A{:}]==[B{:}])返回true).

有没有理由允许第二种语法?这是解析器中的错误吗?是AB真正的一样吗?

有趣的是,以下是合法的:

C = {1,2,3,,,}
Run Code Online (Sandbox Code Playgroud)

arrays syntax matlab operators cell-array

18
推荐指数
2
解决办法
542
查看次数

在MATLAB中的cell2mat之前用逻辑0替换空单元格

我有一个空单元格数组和一些我想要转换为逻辑数组的单元格,其中空单元格为零.当我使用cell2mat时,空单元格被忽略,我最终得到一个只有1的矩阵,没有引用它们持有的先前索引.有没有办法在不使用循环的情况下执行此操作?

示例代码:

for n=1:5              %generate sample cell array
    mycellarray{n}=1;
end
mycellarray{2}=[]      %remove one value for testing
Run Code Online (Sandbox Code Playgroud)

我试过的事情:

mylogicalarray=logical(cell2mat(mycellarray));
Run Code Online (Sandbox Code Playgroud)

这导致[1,1,1,1],而不是[1,0,1,1,1].

for n=1:length(mycellarray)
    if isempty(mycellarray{n})
       mycellarray{n}=0;
    end
end
mylogicalarray=logical(cell2mat(mycellarray));
Run Code Online (Sandbox Code Playgroud)

哪个有效,但使用循环.

matlab matrix cell-array is-empty

17
推荐指数
2
解决办法
4万
查看次数

strsplit:输入类型'char'的未定义函数

我有一个<20x1>单元格数组,每个数组都以字符串的形式存储一些数据(因为它在我看来!!!).我想访问单元格的每个元素作为单个字符串,并且拆分是单词.

我所拥有的单元阵列是<20x1>单元阵列,并且作为我使用for循环的单元访问每个元素.

for i=1:20
    line=newline{i}
end
Run Code Online (Sandbox Code Playgroud)

它向我展示了数组中的所有元素.现在因为line是一个字符串,所以我应用strsplit函数来检索字符串中的单词.

for i=1:20
   words(i,:)=strsplit(line)
end
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误信息:

??? Undefined function or method 'strsplit' for input
arguments of type 'char'.

Error in ==> chk at 15
words=strsplit(newline{i})
Run Code Online (Sandbox Code Playgroud)

谁能解释我错在哪里?任何帮助将不胜感激.提前致谢.

arrays string matlab string-split cell-array

14
推荐指数
1
解决办法
3万
查看次数

用{}运算符包装函数是'UniformOutput'的有效替换,在cellfun中是false吗?

cellfun用来将函数应用于单元格数组中的每个单元格.

我知道我必须设置'UniformOutput'false每当功能,使得该函数的输出被在一个单元阵列返回的包封返回非标量值.

以下面的单元格数组为例:

C1 = {[1 2 3], [4 5 6]};
Run Code Online (Sandbox Code Playgroud)

C1 有两个单元格,每个单元格包含三个元素的向量:

C1 =

  1×2 cell array

    [1×3 double]    [1×3 double]
Run Code Online (Sandbox Code Playgroud)

如果我想添加1到每个单元格中的内容,我可以定义该函数@(x) x + 1并使用cellfun如下方法应用它:

C2 = cellfun(@(x) x + 1, C1, 'UniformOutput', false);
Run Code Online (Sandbox Code Playgroud)

这非常有效,但请注意,我需要确保将'UniformOutput'其设置false为我之前解释过,否则将引发错误.

然而,看完之后此线程,我意识到,如果我用包功能单元阵列建设运营商{}这样的@(x) {x + 1}话,我并不需要设置'UniformOutput'false.

因此,以下命令将生成与C2不丢弃任何错误相同的结果:

C3 = cellfun(@(x) {x + 1}, C1);
Run Code Online (Sandbox Code Playgroud)

在代码布局方面,我更喜欢这种方法,因为它比前者更紧凑,更简洁,但我不确定这是否总是安全的.


因此我的问题是:

我是否可以始终用函数包装 …

matlab function cell-array

14
推荐指数
1
解决办法
302
查看次数