Matlab - Vectorización en Matlab

 
Vista:

Vectorización en Matlab

Publicado por matlab_ (2 intervenciones) el 06/07/2011 15:56:55
Hola,

Seguro que mi pregunta es una bobada, pero no consigo la respuesta:

Quiero sustituir el ciclo for de este código por una única operación:

C = [0.5;0.7]
dim1 = 3;
dim2 = 4;
dim3 = size(C,1)
c = zeros(dim1,dim2,dim3);
for i=1:1:dim3
c(:,:,i) = C(i)
end


Intento algo como esto, pero no funciona:
c(:,:,1:dim3) = C(1:dim3)

¿Podría alguien ayudarme por favor?

Gracias de antemano y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Vectorización en Matlab

Publicado por JOSE JEREMIAS CABALERO (5917 intervenciones) el 06/07/2011 19:21:28
hola.
Tu pregunta nose entiende.
trata de ser claro en tu pregunta.
Al parecer quieres trabajar con hipermatrices

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Vectorización en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/07/2011 20:53:18
hola.

El error esta en que tu quieres guardar una matriz 2x1 en una matriz una matriz 3x4 mas especificamente en esta parte del codigo:
c(:,:,1:1)=C(1:dim3) % guardas una matriz 2x1 en un matriz 3x4

%================
echo on
clear all,
C = [0.5;0.7]
dim1=3
dim2=4
dim3=size(C,1) % dimension de la primera fila de C: 2
c=zeros(dim1,dim2,dim3);
% for i=1:1:dim3
% %c(:,:,i) = C(i);
% end

%(c(:,:,1:dim)es equivalente a los sentencias c(:,:,1:1) c(:,:,1:2)
% c(:,:,1:1) es matriz de 3x4
% c(:,:,1:2) es matriz de 3x4
% C(1:dim3) es matriz de 2x1
% c(:,:,1:1)=C(1:dim3) % guardas una matriz 2x1 en un matriz 3x4
% eso no es posible.
% Alli esta el error
c(:,:,1:1)
c(:,:,1:2)
C(1:dim3)

%=====================
EJECUCION
>> dimension
echo on
clear all

C = [0.5;0.7]
C =
0.5000
0.7000

dim1=3
dim1 =
3


dim2=4
dim2 =

4

dim3=size(C,1) % dimension de la primera fila de C: 2
dim3 =
2

c=zeros(dim1,dim2,dim3)
c(:,:,1) =
0 0 0 0
0 0 0 0
0 0 0 0

c(:,:,2) =
0 0 0 0
0 0 0 0
0 0 0 0

%(c(:,:,1:dim) es equivalente a los sentencias c(:,:,1:1) c(:,:,1:2)
% c(:,:,1:1) es matriz de 3x4
% c(:,:,1:2) es matriz de 3x4
% C(1:dim3) es matriz de 2x1
% c(:,:,1:1)=C(1:dim3) % guardas una matriz 2x1 en un matriz 3x4
% eso no es posible.
% Alli esta el error

c(:,:,1:1)
ans =
0 0 0 0
0 0 0 0
0 0 0 0

c(:,:,1:2)
ans(:,:,2) =
0 0 0 0
0 0 0 0
0 0 0 0

C(1:dim3)
ans =
0.5000
0.7000


Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Vectorización en Matlab

Publicado por Dave (1094 intervenciones) el 06/07/2011 22:41:32
Hola!!!;

Te sugiero que no te compliques mucho, sería suficiente con que hagas lo siguiente:



clear all,clc
% C = [0.5;0.7];
C = [0.1:0.1:0.5];
dim1 = 3;
dim2 = 4;
dim3 = length(C);
c = zeros(dim1,dim2,dim3);
for i=1:dim3
c(:,:,i) = C(i);
end

c

Saludos
Espero que sea de alguna ayuda

Saludos
Dave Correa
[email protected]
http://fismatlab.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Vectorización en Matlab

Publicado por matlab_ (2 intervenciones) el 07/07/2011 00:21:27
Lo que quiero, efectivamente es trabajar con hipermatrices y evitar el for, poder hacerlo en una sola sentencia y para cualquier valor de dim3, ya que que en el ejemplo que he puesto se podría hacer por separado para cada uno d elos dos valores de dim3, pero lo que necesito es algo más general, que valga para cualquier valor.

Gracias por las respuestas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Vectorización en Matlab

Publicado por Alejandro (1 intervención) el 25/04/2012 20:35:10
A(find(A | ~A))

Esto la vectoriza por columnas. Si lo que quiere es hacerlo por filas, solo tiene que calcular antes su traspuesta:

B = A'
B(find(B | ~B))

espero te funcione...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar