Cell components perpendicular division
1 次查看(过去 30 天)
显示 更早的评论
If I have a 4*4 cell array that each contain a 10*10 matrix as below (for example, Aii=10*10 matrix):
A={Aii Aij Aik Ail;
Aji Ajj Ajk Ajl;
Aki Akj Akk Akl;
Ali Alj Alk All};
How can I get a similiar cell array that denotes the division of perpendicular components such that I would get:
C={[Aii/Ajj] [Aij/Ajk] [Aik/Ajl] [Ail/Aji];
[Aji/Akj] [Ajj/Akk] [Ajk/Akl] [Ajl/Aki];
[Aki/Alj] [Akj/Alk] [Akk/All] [Akl/Ali];
[Ali/ij] [Alj/Aik] [Alk/Ail] [All/Aii]};
0 个评论
采纳的回答
DGM
2021-7-17
Something like:
A = num2cell(reshape(1:16,[4 4])) % example array
B = cellfun(@rdivide,A,circshift(A,[-1 -1])) % output
To describe the shifting, consider the example:
A = {'Aii' 'Aij' 'Aik' 'Ail';
'Aji' 'Ajj' 'Ajk' 'Ajl';
'Aki' 'Akj' 'Akk' 'Akl';
'Ali' 'Alj' 'Alk' 'All'};
circshift(A,[-1 -1])
6 个评论
DGM
2021-7-17
编辑:DGM
2021-7-17
Yeah, you might need to set uniformoutput depending on what's in the array.
There isn't a difference between false or 0 when setting 'uniformoutput'. A lot of things are implicit in Matlab where possible. false is explicitly a logical scalar. 0 is a numeric scalar, but it's treated implicitly as a logical false when used in a logical context (and all nonzero numeric values are treated as true). For example
thisvar = false;
if ~thisvar; fprintf('thisvar is false'); end
thisvar = 0;
if ~thisvar; fprintf('thisvar is false'); end
As to why it still works even when truncated to 'uniform', it's hard to say since cellfun() is a built-in and the code isn't visible. That said, a lot of the input parsing for other functions do often allow undocumented abbreviations of parameter names. In fact, it appears that the tests that are used are simply to test that the argument is a char vector matching the characters in the name 'uniformoutput'. The shortest char vector that would meet these requirements is 'un', which seems to work.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!