【发布时间】:2013-03-22 17:21:21
【问题描述】:
如果我有一个代表a=[A1 A2 A3 A4] 的 4x1 单元结构:
a=cell(4,1)
a{1}=[1 3 1 0]
a{2}=[3 3 3 3]
a{3}=[3 2 3 2]
a{4}=[3 3 3 2]
B=[1 1 1 2]; %priority
我想做以下事情:
选择与优先级 B=[1 1 1 2] 对应的单元格(其中 B=1 是最高优先级,A=3)
这意味着,找到任何以 [3 3 3 #] 开头的单元格,其中它们的所有优先级在 B 中都是 1。
理想的答案应该是:a{2}=[3 3 3 3] 和 a{4} = [3,3,3,2]
我的尝试是添加这个:
[P arrayind]=min(B) % problem is that arrayind return index=1 only .. not all indices
if P==1
arrayindex = 1:4 ; %look at each index of the array
c = a(cellfun(@(x) ismember(x(arrayindex), 3), a));
end
但是这给了我一个错误说明:
Error using cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
通过调整代码来适应这个错误:
c = a(cellfun(@(x) ismember(x(arrayindex), 3), a,'UniformOutput',false));
I get this error :
Error using subsindex
Function 'subsindex' is not defined for values of class 'cell'.
现在我被困在这一点上。
【问题讨论】:
-
您是否尝试根据错误编辑
cellfun行?那是cellfun(@(x) ... ,'UniformOutput', false); -
@natan 是的,我应该提到这一点。更新问题
-
运行此代码后,您期望 c 的值是多少?
-
@wakjah 我更新了问题,所以更清楚了。结果应该是
a{2}和a{4} -
@NLed 尝试:
[val ind] = max(cellfun(@(x) length(find(ismember(x(arrayindex), 3))), a)); b = a(ind);。这将给出 3s 数量最多的元胞数组。
标签: matlab compare constraints combinations