gudn tach!
mit zusammenstueckeln meinte ich, dass ich in einer schleife sowas wie
'A(1:v(1),1:v(2),1:v(3),1:v(4),1:v(5))=1;' basteln wuerde. das geht zwar, ist jedoch sehr lahm in der ausfuehrung und nicht huebsch.Ja, das ist nun, nachdem ich Dein Problem vollständig erfasst habe, auch mein bisher einziger Ansatz. :/
ich habe es nun, weil ich damit fertig werden wollte, ueber folgenden algorithmus geloest:
% gegeben:
% v, z.b. [2 3 2 2 4 2]
% dims_A = ausdehnungen von A, z.b. [5 2 6 2 6 3]
dim_A = length(dims_A); % dimension von A (also auch von v), z.b. 6
size_A = prod(dims_A); % anzahl der elemente von A
A = zeros(dims_A); % erzeuge matrix, setze alles null
ind = ones(dim_A, 1); % index des ersten elements in der matrix A
for j=1:size_A % schleife ueber alle matrixkomponenten
if(ind<=v) % komponentenweiser vergleich
A(j) = 1; % setze ggf. 1
end
ind(1) = ind(1)+1; % naechstes element
% pruefe, ob uebertrag; uebertrage ggf.
for k=1:length(ind) % schleife ueber alle komponenten des index-vektors
temp_diff = dims_A(k)-ind(k); % pruefe, ob index ueberhaupt existiert
if(temp_diff<0) % falls nicht, ist ein uebertrag vorhanden
ind(k) = 1; % setze aktuelle komponente des index-vektors zurueck
if(k<length(ind)) % und uebertrage ueberhang auf naechste komponente
ind(k+1) = ind(k+1)-temp_diff;
else
error('aaah, out of range, das darf noch nedd sein!');
end
end
end
clear temp_diff;
end
prost
seth