因此,在3 X 18单元阵列中,7列是空的,我需要一个新的单元阵列,它是3 X 11.任何建议没有去循环?在Matlab中,如何消除单元阵列中的空列?
0
A
回答
3
让我们考虑下面的单元阵列。其第二栏只包含[]
,所以应该删除。
>> c = {1 , [], 'a'; 2, [], []; 3, [], 'bc'}
c =
[1] [] 'a'
[2] [] []
[3] [] 'bc'
可以计算出一个合理的指标,告诉哪些列应保持,然后用它来获得结果:
>> keep = any(~cellfun('isempty',c), 1); %// keep columns that don't only contain []
keep =
1 0 1 %// column 2 should be removed
>> result = c(:,keep)
result =
[1] 'a'
[2] []
[3] 'bc'
它是如何工作:
cellfun('isempty' ,c)
是与c
大小相同的矩阵。它包含1
在条目(m,n)
当且仅当c{m,n}
为空。~cellfun('isempty' ,c)
是以上的逻辑否定,所以它包含1
其中c
不为空。any(~cellfun('isempty' ,c), 1)
将any
应用于上述的每一列。因此,如果该列中的任何c
单元格都非空,那么它是一个行向量,因此其m
条目等于1
,否则0
。- 以上用作逻辑索引来选择所需的
c
列。
1
使用cellfun
检测的元素,然后从找到的空元素列和删除那些:
cellarray(:, any(cellfun(@isempty, cellarray), 1)) = [];
相反,如果你想保持列与至少一个非空元素,使用all
而不是any
。
例如:
>> cellarray = {1 2 ,[], 4;[], 5, [], 3}
[1] [2] [] [4]
[] [5] [] [3]
>> cellarray(:,any(cellfun(@isempty, cellarray), 1))=[]
cellarray =
[2] [4]
[5] [3]
+0
星期二感谢抓住了! – brodoll
相关问题
- 1. MATLAB:如何从单元阵列B中删除单元阵列A的元素?
- 2. 如何从MATLAB中的单元格阵列中的矩阵中删除某列?
- 3. MATLAB中的单元阵列
- 4. 单元阵列中的matlab
- 5. Matlab的:在单元阵列
- 6. Matlab单元阵列
- 7. 单元阵列MATLAB
- 8. 从在Matlab单元阵列
- 9. 在MATLAB中绘制单元阵列
- 10. Matlab:如何在矩阵中转换单元阵列
- 11. 如何在Matlab中连接单元阵列中的数组
- 12. Matlab中的单元阵列的子串
- 13. 如何从MATLAB中的第一个单元阵列中删除共同元素?
- 14. MATLAB中使用parfor的单元阵列
- 15. MATLAB中单元格阵列的交点
- 16. matlab中的单元阵列均值
- 17. matlab中的三维单元阵列
- 18. MATLAB单元阵列和阵列 - 错误
- 19. 从阵列matlab中删除元素
- 20. 如何在MATLAB中的一组单元阵列中有效地找到独特的单元阵列?
- 21. 如何检测单元阵列中的空单元格?
- 22. matlab联合单元阵列
- 23. MATLAB分区单元阵列
- 24. 绘制单元阵列Matlab
- 25. 单元阵列操纵matlab
- 26. MATLAB单元阵列操作
- 27. 如何合并两个单元阵列列有增加的空间在MATLAB
- 28. 在Matlab中嵌套单元阵列的单元格函数
- 29. 删除阵列中的空白元素
- 30. 将matlab中的单元阵列转换为R中的列表
这简直是真棒解决方案!正是我需要的。你也可以请打破它(保持和结果部分),我想知道它是如何工作的:) – miprakas
我很高兴这是你需要的。我已经添加了一个解释它的解释 –
@LuisMendo非常感谢你,你真棒 –