function [lines1, max_vertex1] = matrix_to_arg(matrix1)
% convert a matrix into a vector of line-structs
% and, one vector.
[ROWS, COLS] = size(matrix1);
if(~(COLS==10))
fprintf('matrix1 must have 10 columns\n');
return;
end
max_vertex1 = matrix1(1, 7:10);
M = matrix1(:, 1:6);
for i=1:ROWS
lines1(i) = struct('point1', M(i,1:2), ...
'point2', M(i,3:4), ...
'theta', M(i,5), ...
'rho', M(i,6));
end
end
2
A
Antwort
1
können Sie num2cell
und deal
auf folgende Weise verwenden:
% random data
M = rand(5000, 6);
% split each row to cell
point1 = num2cell(M(:,1:2),2);
point2 = num2cell(M(:,3:4),2);
theta = num2cell(M(:,5),2);
rho = num2cell(M(:,6),2);
% init struct
lines1 = struct('point1',[],'point2',[],'theta',[],'rho',[]);
lines1(size(M,1)).point1 = [];
% deal data to struct
[lines1(:).point1] = deal(point1{:});
[lines1(:).point2] = deal(point2{:});
[lines1(:).theta] = deal(theta{:});
[lines1(:).rho] = deal(rho{:});
0
Nun, die Linie die Sie suchen, ist dies:
lines1 = arrayfun(@(i) struct('point1', M(i,1:2), 'point2', M(i,3:4), 'theta', M(i,5), 'rho', M(i,6)), 1:ROWS);
Sie können mehr über arrayfun lernen hier
0
Wenn Sie Ihre Matrix M
in ein Zellenfeld mit den korrekten Abmessungen konvertieren, Sie können die vektorisierte Version des struct
Konstruktor verwenden:
function [lines1, max_vertex1] = matrix_to_arg(matrix1)
% convert a matrix into a vector of line-structs
% and, one vector.
[ROWS, COLS] = size(matrix1);
if(~(COLS==10))
fprintf('matrix1 must have 10 columns\n');
return;
end
max_vertex1 = matrix1(1, 7:10);
M = mat2cell(matrix1(:, 1:6),ones(1,ROWS),[2 2 1 1]);
lines1 = struct('point1', M(:,1), ...
'point2', M(:,2), ...
'theta', M(:,3), ...
'rho', M(:,4));
end
EDIT: ersetzt COLS
mit ROWS
im Aufruf von mat2cell
. Ich verwirrte die Dimensionsgrößen in meinen Tests ...
Verwandte Themen
- 1. Ist die Iteration im folgenden Code erforderlich?
- 2. Ist es möglich, den folgenden Code schneller zu machen?
- 3. Ist es möglich, For-Schleife
- 4. Warum Segmentierungsfehler im folgenden Code? Dies ist
- 5. Was ist der Unterschied im folgenden Code?
- 6. Was macht% im folgenden Code?
- 7. Pfad im folgenden Code einrichten
- 8. rstudio - ist es möglich, einen Code im Hintergrund auszuführen
- 9. Ist es möglich, ELMAH komplett im Code zu konfigurieren?
- 10. Ist es möglich, eine Eigenschaft im Code "x: Binden"?
- 11. Ist es möglich, asp-Steuerelement dynamisch im Code hinter generieren?
- 12. Ist es möglich, die for-Schleife von rückwärts zu starten
- 13. Ist es möglich, eine Funktion zu beenden, die innerhalb einer Schleife außerhalb der Schleife liegt?
- 14. Gibt es im folgenden Java-Code einen Nebeneffekt?
- 15. Ist es möglich, Terraform Code hinzuzufügen
- 16. UITabBarController ist es möglich, die Registerkarte über Code auszuwählen?
- 17. Ist es möglich, die FASM-Präprozessorausgabe anzuzeigen?
- 18. Ist es möglich, C++ - Code zu symbolisieren?
- 19. Ist es möglich, die async.js-Schleife vorzeitig zu beenden?
- 20. Warum gibt es im folgenden C# -Code eine geschweifte Klammer?
- 21. Was ist der Fehler im folgenden Code für Matrix-Mutliplication?
- 22. Warum ist $ scope nicht hier im folgenden Code definiert
- 23. Es ist möglich, C89-Code mit C99-Code zu mischen?
- 24. Wie übergeben Sie verschiedene Objektvariablen, die Getter in den folgenden Code für die Schleife ist?
- 25. Wie funktioniert intern im folgenden Code?
- 26. Java Mehrere Vererbung, doppelte Code loszuwerden
- 27. VS-Code für Android. Ist es möglich?
- 28. Ist es möglich, Schatten von VS Code
- 29. Was bedeutet 1F im folgenden Code?
- 30. Warum funktioniert Puts im folgenden Code nicht?
Sind Sie über Ihre Antwort sicher? – anonymous
Nun, ich habe eine Einschränkung vergessen: Dies funktioniert nur für ein numerisches Array. Aber ansonsten, ja, bin ich mir sicher. Welchen Fehler bekommst du? EDIT: Ja, mein Schlechter, Tippfehler im Code werde ich updaten. – souty
Bro, dieser Code erreicht nicht das gleiche. Ich versuchte es. – anonymous