细胞内部元素的大小

size of inner elements of cells

我正在读取一些数据及其属性(比如 A,其中第一行是 ID,第二行是它们的属性值)。我想将此类数据放在一个单元格中,其中第一列是唯一 ID,第二行是它们的属性。每当属性有重复值时,我都会在其行的前面放置可用的空缺。例如我想构建 C

A =
 1     2     3     2
 2     4     5     9

C{1}=
1   2   0
2   4   9
3   5   0

当我要测试单元格中内部房屋的大小时,例如

size(C{1},2)

ans = 3

size(C{1},1)

ans = 3

size(C{1}(1,:),2)

ans =  3

所有 return 3 因为它占据了 0 个空房子。那么我应该如何理解将我的新数据(例如 (1,5))放在哪里?是遍历还是找到0的地方插入? 感谢您的帮助。

为什么不使用元胞数组来解决这类问题?您是如何生成 C 矩阵的?

即使您对 C 矩阵使用元胞数组,C 的每个元素在您的情况下都是一个矩阵,因此尺寸应该是恒定的。

我在矩阵中使用了元胞数组。 (即)每个元素根据重复的大小采用自己的大小。例如,您可以看到 C{2,2} 两个 值,而 C{1,2}C{3,2} 只有一个 值。您可以轻松检查它们的大小而无需检查零。请注意,即使任何值为零,此代码仍然有效。

矩阵的第一列代表 identifiers,而第二列代表 values,它根据重复的数量采用自己的大小。

这是我使用 accumarray and unique 生成 C 作为元胞数组的实现。

代码:

C = [num2cell(unique(A(1,:).')),  accumarray(A(1,:).',A(2,:).',[],@(x) {x.'})]

您的示例输入:

A = [1     2     3     2;
     2     4     5     9];

输出:

>> C

C = 

[1]    [         2]
[2]    [1x2 double]
[3]    [         5]

>> size(C{2,2},2)

ans =

 2

>> size(C{1,2},2)

ans =

 1

来自DOC

Note: If the subscripts in subs are not sorted with respect to their linear indices, then accumarray might not always preserve the order of the data in val when it passes them to fun. In the unusual case that fun requires that its input values be in the same order as they appear in val, sort the indices in subs with respect to the linear indices of the output.


另一个例子:
输入:

A = [1  2   1   2   3   1;
     2  4   5   9   4   8];

输出:

C = 

[1]    [1x3 double]
[2]    [1x2 double]
[3]    [         4]

希望对您有所帮助!!