Vectors must be the same length

1 visualización (últimos 30 días)
nancy robles
nancy robles el 4 de Oct. de 2020
Comentada: Image Analyst el 5 de Oct. de 2020
I'm not sure what it means by "vectors must be the same length".
This is my code
i=1;
ct= 0;
Cmftct=0;
Coldct = 0;
Hotct= 0;
while (i <= n)
if (temps(i) <= 32)
Coldct = Coldct + 1;
elseif (temps(i) <=70)
Cmftct = Cmftct +1;
elseif (temps(i) <=99);
Hotct = Hotct +1;
else
Hotct = Hotct +1;
end
i = i +1;
end
figure(1)
x=[i : length(temps)];
y = temps;
plot(x, y, 'Marker', '^', 'Color', 'r', 'LineStyle', ':' ,'LineWidth', 2);
figure(2)
c = categorical(["# of cold Days", "# of Cold Days","# of Comfortable Days", "# of Hot Days"]);
b = [Coldct, Cmftct, Hotct];
bar(c, b);
end

Respuesta aceptada

Image Analyst
Image Analyst el 4 de Oct. de 2020
Lots of problems with that:
  1. Computing x before y so x and y have different lengths
  2. Using while loop instead of vectorized.
  3. c having 4 categories - cold is repeated. Not the same as b which has 3 numbers, not 4.
Here is the fixed code:
temps = 100 * rand(1, 50);
ColdCount = sum(temps <= 32);
CmftCount = sum(temps <= 70);
HotCount = sum(temps > 70);
subplot(2, 1, 1);
y = temps;
x = 1 : length(y);
plot(x, y, 'Marker', '^', 'Color', 'r', 'LineStyle', ':' ,'LineWidth', 2);
yline(32, 'LineWidth', 2, 'Color', 'b');
yline(70, 'LineWidth', 2, 'Color', 'b');
title('Temperature vs. Day', 'FontSize', 18);
xlabel('Day', 'FontSize', 18);
ylabel('Temperature', 'FontSize', 18);
grid on;
subplot(2, 1, 2);
c = categorical(["# of Cold Days","# of Comfortable Days", "# of Hot Days"]);
b = [ColdCount, CmftCount, HotCount];
bar(c, b);
ylabel('Count', 'FontSize', 18);
grid on;
  2 comentarios
nancy robles
nancy robles el 4 de Oct. de 2020
How do you get length without using the word length in a array?
Image Analyst
Image Analyst el 5 de Oct. de 2020
When I said:
temps = 100 * rand(1, 50);
I was creating a list of 50 numbers in a row vector. When I say
temps <= 32
that creates a logical vector 50 elements long where each is 0 (false) or 1 (true) as to whether the number in the corresponding temps vector is <= 32 or more than 32. For example [0,0,1,0,1,1,1,0,0,1,1,0,1,......]
Now I don't want the length of any of those vectors - I already know they are 50 elements long, so there is no need to call length(). Plus length() will tell me the length of the entire vector, both 0s and 1s, not just the 1s (or 0s).
When I say
ColdCount = sum(temps <= 32);
that sums up the vector, which sums up the 1's which is the values colder than or equal to 32, which is the count that was wanted. Does that explain it more thoroughly?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Call Python from MATLAB en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by