我有一个单元阵列,每个单元格是n×n矩阵。我想删除inv(cell{i}'*cell{i})
给出警告矩阵接近单数的单元。 谢谢删除满足特定条件的单元格
回答
一般来说,删除元素是很容易的部分。如果C
是你的阵列,除去指数以向量idx
指定单元格可以这样做:
C(idx) = {};
关于你提到的具体问题,检查一个矩阵是“几乎”单数或不能够与rcond
来完成(如果结果接近零,则可能是单数)。将它应用到你可以通过以下方式使用cellfun
所有单元格:
idx = cellfun(@(x)(rcond(x' * x) < 1e-12), C);
调整阈值,根据自己的喜好。得到的idx
是一个逻辑数组,在奇异矩阵的位置上有1
s。如上所示,使用idx
从C
中删除这些元素。
假设您已经定义了issingular
定义的函数,您可以使用cellfun
来获取包含要删除的矩阵的单元格的索引。
c; % cell arry
singularIdx = cellfun((@x) issingular(inv(x' * x)), c); %' added single quote for SO syntax
cFiltered = c(~singluarIdx);
你可能需要编写自己的函数来检查奇异性,以获取更多信息上看到这样一个问题:Fast method to check if a Matrix is singular? (non-invertible, det = 0)
创建检查您的病情功能:
function state = CheckElement(element)
if ([condition])
state = 1;
else
state = 0;
end
end
然后在您所有的细胞阵列元素上做cellfun,如下所示:
indices = cellfun(@CheckElement,myCellArray);
cellArray(indices) = [];
在计算时,你不需要'UniformOutput',false'部分'indices'。你希望索引是一个矩阵,而不是单元阵列。 –
@EitanT ..非常感谢,修复了代码。 –
没问题。有+1。 –
- 1. 删除由价值元素满足一定条件
- 2. 对于每个循环只删除一些满足条件的单元格
- 3. 如何从满足条件的文本中删除特定单词?
- 4. 导轨 - 删除满足条件
- 5. 的Ruby/Rails 4 - 满足特定条件
- 6. 从给定特定条件的单元格中删除行
- 7. 更新表格单元格的当条件满足
- 8. 只有在满足特定条件时才粘贴到单元格
- 9. 从列表中删除一些满足条件的元素
- 10. 寻找满足特定条件
- 11. 如果满足条件,填充单元格 - 在Google表格中
- 12. 获得满足特定条件的记录,并排除他人
- 13. 删除不满足数据框特定列中的条件的数据框(R)
- 14. 如果特定条件满足,更改子元素的颜色
- 15. Excel 2015,当条件满足时冻结单元格的图形
- 16. 当单元格满足条件时,在单元格中插入文本
- 17. 满足条件
- 18. 满足一定条件
- 19. 在满足一定条件
- 20. XSL,满足一定条件
- 21. 当满足特定的列和行参数时提取特定的单元格
- 22. 如何删除列表中满足一定条件的最左/最右元素?
- 23. 大熊猫DataFrame:删除行满足一定条件
- 24. 在VBA删除行,如果满足一定条件
- 25. 只有在满足某些条件时才添加单元格
- 26. 满足条件的
- 27. 删除具有特定单元格颜色的行 - 有条件格式颜色
- 28. 如果任何元件满足条件
- 29. 数条件满足
- 30. 删除std:list <User_Define>中满足特定条件的元素的最佳方法是什么?
T他'''和'*'操作符没有为单元数组定义,所以你会为'c''和'c' * c'部分触发一个错误。另外,我不确定你实际上是否必须计算'inv' ...我认为这是'c'* c'结果可以是单数。 –
@EitanT,噢,我完全搞砸了。实际上我不得不用一个匿名函数来包装它以获得所需的行为 – slayton
我仍然认为'inv'是不必要的。 –