transform an empty matrix '0x0 double' into a matrix '0x2 double'
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Alberto Acri
am 20 Jul. 2023
Kommentiert: Bruno Luong
am 20 Jul. 2023
Hello! How can I transform an empty matrix '0x0 double' into a matrix '0x2 double' as in the figure?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1438573/image.png)
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 Kommentare
Akzeptierte Antwort
Bruno Luong
am 20 Jul. 2023
Bearbeitet: Bruno Luong
am 20 Jul. 2023
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 Kommentare
Weitere Antworten (2)
Steven Lord
am 20 Jul. 2023
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 Kommentare
Steven Lord
am 20 Jul. 2023
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))
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!