2016-07-21 52 views
0

我目前有一个4x3500单元阵列。第一行是单个数字,第2行是单个字符串,第3和第4行也是单个数字。选择在第一行中包含特定值的单元格数组中的所有列?

例:

1 1 2 3 3 4 5 5 5 6 
hi no ya he ........ % you get the idea 
28 34 18 0 3 ...... 
55 2 4 42 24 ..... 

我希望能够选择具有第一行中的某个值的所有列。 如果我想“1”作为第一行的值,它会返回

1 1 
hi no 
28 34 
55 2 

然后我想基于第2行的字符串进行排序。 如果我想have'hi”,它将返回:

1 
hi 
28 
55 

我试图做的事:

variable = cellArray{:,find(cellArray{1,:} == 1)} 

不过,我不断收到:

Error using find 
Too many input arguments. 

Error using == 
Too many input arguments. 

任何帮助将非常感谢! :)

+0

我没有MATLAB来测试这个。您可以通过执行'vec = [cellArray {1,:}]'从第一行创建一个向量。现在,执行'ind = vec == 1'。您现在知道要从您的单元格数组中提取哪些列。这是否工作:'cellArray {:,ind}'? –

回答

3

{}索引将返回comma separated list它将提供多个输出。当你将这个传递给find时,它与将单元阵列中的每个元素作为单独输入传递相同。这是导致许多输入参数错误的原因。

您将希望用[]包围逗号分隔列表以创建一个或多个数组。此外,您不需要find,因为您可以使用逻辑索引来获取所需的列。此外,您还需要使用()来获取相关行的索引,以避免使用逗号分隔的列表。

variable = cellArray(:, [cellArray{1,:}] == 1) 
+0

这太棒了,完美无缺!对于我自己的知识只是一个简短的问题:为什么我们允许使用'()'作为cellArray,而不必使用'{}'? – aboublemc

+0

@aboublemc'{}'从单元数组中获取*元素*,而'()'返回包含某些元素的单元数组。如果使用'{}'得到多个值,它将为每个值返回一个输出。 – Suever

相关问题