Matlab数组有奇怪的语法

Matlab数组有奇怪的语法,matlab,cell-array,Matlab,Cell Array,在Matlab中,我们使用textscan从文件或某处获取单元数组。但是细胞阵列的行为是如此奇怪。 下面是示例代码: >> str = '0.41 8.24 3.57 6.24 9.27'; >> C = textscan(str, '%3.1f %*1d'); >> C C = [5x1 double] 我们可以知道C是一个大小为5*1的单元数组。当我使用C{1},C{1}{1}和C(1)时。我得到以下结果: >> C{1} ans =

在Matlab中,我们使用textscan从文件或某处获取单元数组。但是细胞阵列的行为是如此奇怪。 下面是示例代码:

>> str = '0.41 8.24 3.57 6.24 9.27';
>> C = textscan(str, '%3.1f %*1d');
>> C

C = 

[5x1 double]
我们可以知道C是一个大小为5*1的单元数组。当我使用C{1},C{1}{1}和C(1)时。我得到以下结果:

>> C{1}

ans =

0.4000
8.2000
3.5000
6.2000
9.2000

>> C{1}{1}
Cell contents reference from a non-cell array object.

>> C(1)

ans = 

[5x1 double]
为什么我不能使用C{1}{1}从单元格数组中获取元素?那么如何从该单元格数组中获取元素

我在互联网上找到的一个例子是:

%% First import the words from the text file into a cell array
fid = fopen(filename);

words = textscan(fid, '%s');

%% Get rid of all the characters that are not letters or numbers
for i=1:numel(words{1,1})
    ind = find(isstrprop(words{1,1}{i,1}, 'alphanum') == 0);
    words{1,1}{i,1}(ind)=[];
end
正如单词{1,1}{i,1}(ind)=[]所示,使用{}的机制是什么

谢谢

那么如何从该单元格数组中获取元素

通过
C(1)
C(2)
等方式访问值

那么如何从该单元格数组中获取元素


通过
C(1)
C(2)
等方式访问值

对于单元数组和数字数组的索引,有一种稍微不同的语法。你的产出

>> C
C = 

[5x1 double]
它告诉你,你拥有的是一个1x1单元数组,其中1个单元是一个5x1的双精度数组。单元格数组通过
{}
索引到,而“普通”数组通过
()
索引到

因此,您希望索引到单元格数组的第一个元素,然后使用
C{1}(1)
向下索引到5x1 double数组中的第一个值。获取第二个值-
C{1}(2)
,依此类推

如果您熟悉其他编程语言,那么单元格数组类似于指针数组;运算符
A(n)
用于获取数组A的第n个元素,而
A{n}
获取数组A的第n个元素(或“包含在单元格数组A的第n个单元格中”)指向的对象。如果A不是单元数组,
A{n}
将失败

所以,知道C是一个细胞阵列,这就是为什么你在你尝试的案例中得到了你想要的-

C{1}
返回C的第一个单元格中包含的5x1双数组

C{1}{1}
获取包含在C的第一个单元格中的对象(称为B),然后尝试获取包含在B的第一个单元格中的对象。它失败,因为B不是单元格数组,它是5x1双数组

C(1)
返回
C
的第一个元素,该元素是包含5x1双数组的单个单元格


但是
C{1}(1)
将为您获取包含在
C
的第一个单元格中的5x1数组的第一个元素,这就是您要查找的内容。正如我上面提到的@Cheery所说,它可能更容易,而不是编写
C{1}(1)
C{1}(2)
。。。要通过设置C=C{1}删除“单元级”索引,这意味着
C
现在是5x1双数组,您可以使用
C(1)
C(2)
。。。希望这有意义

对于单元数组和数值数组的索引,有一种稍微不同的语法。你的产出

>> C
C = 

[5x1 double]
它告诉你,你拥有的是一个1x1单元数组,其中1个单元是一个5x1的双精度数组。单元格数组通过
{}
索引到,而“普通”数组通过
()
索引到

因此,您希望索引到单元格数组的第一个元素,然后使用
C{1}(1)
向下索引到5x1 double数组中的第一个值。获取第二个值-
C{1}(2)
,依此类推

如果您熟悉其他编程语言,那么单元格数组类似于指针数组;运算符
A(n)
用于获取数组A的第n个元素,而
A{n}
获取数组A的第n个元素(或“包含在单元格数组A的第n个单元格中”)指向的对象。如果A不是单元数组,
A{n}
将失败

所以,知道C是一个细胞阵列,这就是为什么你在你尝试的案例中得到了你想要的-

C{1}
返回C的第一个单元格中包含的5x1双数组

C{1}{1}
获取包含在C的第一个单元格中的对象(称为B),然后尝试获取包含在B的第一个单元格中的对象。它失败,因为B不是单元格数组,它是5x1双数组

C(1)
返回
C
的第一个元素,该元素是包含5x1双数组的单个单元格


但是
C{1}(1)
将为您获取包含在
C
的第一个单元格中的5x1数组的第一个元素,这就是您要查找的内容。正如我上面提到的@Cheery所说,它可能更容易,而不是编写
C{1}(1)
C{1}(2)
。。。要通过设置C=C{1}删除“单元级”索引,这意味着
C
现在是5x1双数组,您可以使用
C(1)
C(2)
。。。希望这有意义

详细的解释使我了解了这个单元格数组的根本原因。谢谢。详细的解释让我明白了这个单元格数组的根本原因。谢谢