An easy way to modify matrix elements?
Afficher commentaires plus anciens
I've created a matrix, P, representing products (the rows set by NCE = 1:NCEMAX) over time (20 years - columns). I launch 1 product/year, some of which will fails 4 years into production (randomly 3x1 matrix). It might look like this without failure (a 1 represents in manufacture)
NCEMAX = 3;
P=[...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
Failure = [1;0;1]
The matrix I want to create would be, as the second product fails 4 years after it starts (ie year 5 as it is NCE2)
NCE2 = [...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
I've tried
P(: , NCE+4:end) = P(: , NCE+4:end) .* Failure;
but the NCE+4 doesn't shift up each row, i.e. NCE+4 always = 5 not 5,6 then 7.
What am I doing wrong? Any help much appreciated.
4 commentaires
Torsten
le 24 Déc 2021
Please include your executable code.
Stephen23
le 24 Déc 2021
NCE is a vector. Adding 4 to NCE returns another vector. Using a vector as any input to the colon operator ignores all elements of the vector except the first element, as documented here:
" If you specify nonscalar arrays, then MATLAB interprets j:i:k as j(1):i(1):k(1)."
That explains the behavior you observe. It is not clear from your question what you expect to happen.
Image Analyst
le 24 Déc 2021
Modifié(e) : Image Analyst
le 24 Déc 2021
What does Failure represent? Like if it is 1 then that row fails for years 4 and later so P for that row would be 1 for columns 1,2 and 3, then 1 for 4-20?
What exactly is supposed to be shifting upwards? Some rows get shifted up, like row 3 moves into row 2 or something?????
So P=1 for no failure and P=0 for failure? And what value indicates failure in the failure vector 1 or 0?
Why does the first column and second of NCE2 have some zeros in some rows before the 1's start? Is that because the product has not yet been produced for those years?
Andrew Rutter
le 25 Déc 2021
Réponse acceptée
Plus de réponses (1)
for NCE = 1:NCEMAX
if Failure(NCE) == 0
P(NCE,NCE+4:end) = 0
end if
end
Catégories
En savoir plus sur MATLAB dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!