【发布时间】:2015-05-19 10:57:36
【问题描述】:
我正在读取一些带有属性的数据(比如 A,其中第一行是 ids,第二行是它们的属性值)。我想将这些数据放在一个单元格中,其中第一列是唯一 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
全部返回 3,因为它以 0 占据空置房屋。那么我应该如何理解将新数据放在哪里(例如 (1,5))?我应该遍历还是找到 0 的位置并插入那里? 感谢您的帮助。
【问题讨论】:
-
使用
find(C{1}(j,:) == 0,1)确实应该适用于第 j 行,但请注意,如果整行都被填满,find 将返回一个空的索引数组。 But why not use matlabs map container filled with lists? -
所以,首先我要检查它是否包含 0 使用 ismember 或 find 来查找非零元素的第一个索引,如果它返回空我使用 end+1 插入新的项目。我必须在我的代码中多次使用它。带有列表的地图容器的主要好处是什么?细胞不做同样的事情?
-
@hamideh 您不必每次都这样做。你可以一次完成。我已经发布了答案。看看:)
-
@Santhan,非常感谢,它确实有效,请您告诉我那些
.点在您的脚本中的含义是什么?而且我的情况实际上有 3 行,我想将这些值放置到结果单元格中。例如A=[ 1 2 3 2;2 4 5 9;1 2 7 4] 我希望 C 采用单元格格式,输出 [1]->[2 1], [2]->[4 2; 9 5], [3]->[5 7]那么,您的脚本可以更改吗在标识符行下添加列的一般情况? (重复标识符的属性彼此跟随或各自放在一行中) -
如果你问
.',它只是意味着转置。在使用'时会进行共轭转置。当然,将它们用于实数会产生相同的结果。我不明白你的第二个问题
标签: matlab size cell-array