transform an empty matrix '0x0 double' into a matrix '0x2 double'
11 次查看(过去 30 天)
显示 更早的评论
Hello! How can I transform an empty matrix '0x0 double' into a matrix '0x2 double' as in the figure?
For example in my case, I have a cell 'test_p'. Rows 3,4,5 (0x0 double) should become like rows 1 and 2 (0x2 double).
test_p = importdata("test_p.mat");
data_0x2_double = test_p{1, 1};
data_0x0_double = test_p{3, 1};
0 个评论
采纳的回答
Bruno Luong
2023-7-20
编辑:Bruno Luong
2023-7-20
test_p = importdata("test_p.mat")
ir = cellfun('size',test_p,1)==0 & cellfun('size',test_p,2)==0
test_p(ir) = {zeros(0,2)}
0 个评论
更多回答(2 个)
Steven Lord
2023-7-20
Since a 0-by-0 array and a 0-by-2 array have the same number of elements you can reshape one into the other.
A = zeros(0, 0)
B = reshape(A, [0 2])
C = reshape(B, 0, 0)
whos A B C
3 个评论
Steven Lord
2023-7-20
Your code below made an assumption about the user's data, one that's likely valid (and is valid WRT the original question) but in some cases may not be.
A = zeros(0, 0, 'single');
B = reshape(A, [0 2]);
C = zeros(0, 2);
whos A B C
B and C are different classes. You could modify the call that creates C to always create it 'like' A or with the same type as A, but reshape will not change the type and is shorter than either of the calls that create C1 or C2 below.
C1 = zeros(0, 2, 'like', A)
C2 = zeros(0, 2, class(A))
另请参阅
类别
在 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!