preprocesamiento de datos matlab

Adquisición de datos de Matlab, preprocesamiento, estadísticas, visualización, reducción de dimensionalidad

Preprocesamiento de datos - MATLAB y Simulink - MathWorks China https://ww2.mathworks.cn/help/matlab/preprocessing-data.html

1. Adquisición de datos

1.1 Obtener de Excel

usar tabla de lectura ()

Ejemplo 1:

Use spreadsheetImportOptions (Nombre, Valor) para determinar inicialmente la información de importación,

Luego agréguelo en el formato opts.Name=Value .

%    工作簿: C:\Users\Hao\Desktop\程序_MATLAB数学建模方法与实践_卓金武等\Cha2\sz000004.xls
%    工作表: Sheet1
 
%% 设置导入选项并导入数据
opts = spreadsheetImportOptions("NumVariables", 8);%变量数8
%spreadsheetImportOptions允许指定 MATLAB® 如何从电子表格文件中导入表格数据
 
% 指定工作表和范围
opts.Sheet = "Sheet1";
opts.DataRange = "A1:H45";
 
% 指定列名称和类型
opts.VariableNames = ["Date", "DateNum", "Popen", "Phigh", "Plow", "Pclose", "Volum", "Turn"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double"];
 
% 导入数据
sz000004 = readtable("C:\Users\Hao\Desktop\程序_MATLAB数学建模方法与实践_卓金武等\Cha2\sz000004.xls", opts, "UseExcel", false);
 
 
%% 清除临时变量
clear opts

Ejemplo 2:

Primero inicialice el objeto spreadsheetImportOptions ,

Luego use el formato de opts.Name=Value para agregar uno por uno.

% 初始化 SpreadsheetImportOptions 对象
opts = spreadsheetImportOptions; 
 
% 指定变量名称
opts.VariableNames = 'LastName';
 
% 变量类型
opts.VariableTypes = 'categorical';
 
% 数据起始单元格
opts.DataRange = 'A2';
 
% 使用导入选项预览文件中的八行数据
preview('patients.xls',opts)
oneVar = readtable('patients.xls',opts);
% 列出变量及大小和类型
whos oneVar

Ejemplo 3:

Almacene la información de importación en una variable,

Luego use spreadsheetImportOptions (Nombre, Valor) para agregar información de importación.

% 变量数
numVars = 7;
% 变量名称
varNames = {'LastName','Gender','Age','Location','Height','Weight','Smoker'} ;
% 变量类型
varTypes = {'char','categorical','int32','char','double','double','logical'} ;
% 数据起始单元格
dataStartLoc = 'A2';
 
% 使用 spreadsheetImportOptions 函数和变量信息初始化导入选项对象 opts
opts = spreadsheetImportOptions('NumVariables',numVars,...
                                'VariableNames',varNames,...
                                'VariableTypes',varTypes,...
                                'DataRange', dataStartLoc); 
 
% 使用导入选项预览文件中的八行数据
preview('patients.xls',opts)
% 使用 readtable 导入数据
T = readtable('patients.xls',opts);
% 列出变量及大小和类型
whos T

注:readtable Solo se admiten los siguientes pares de nombre y valor:

  1. Parámetros de texto y hoja de cálculo -  ReadVariableNames,ReadRowNames

  2. Solo parámetros de texto -  DateLocale,Encoding

  3. Solo parámetros de hoja de cálculo -  Sheet,UseExcel

Usar xlsread() --xlswrite()

a=xlsread('C:\Coporation_evaluation.xlsx',2,'A2:I16')

% 'C:\Coporation_evaluation.xlsx' 表示读入Excel数据所在位置

% 2 表示位于sheet2

% 'A2:I16' 表示读入的数据范围


a=xlswrite('C:\Coporation_evaluation.xlsx',a,3,'B1:C5')

% 'C:\Coporation_evaluation.xlsx' 表示写入Excel工作簿所在位置,若不存在会自动创建

% a 表示待写入的数据

% 3 表示sheet3

% 'B1:C5' 表示写入Excel中的的具体位置

[data,textdata] = xlsread('D:\Desktop\xx.xls'), lo que se lee

  • Lea los datos del archivo de Excel con la ruta del archivo D:\桌面\xx.xlsy almacene los datos en dos variables datay textdata.
  • Entre ellos, xlsread()se encuentra la función integrada de MATLAB, que se utiliza para leer los datos en el archivo de Excel.
  • El primer parámetro de entrada 'D:\桌面\aa.xls'indica la ruta completa del archivo de Excel, que se puede modificar según la situación real.
  • Si el segundo parámetro está vacío, la función lee todos los datos numéricos de manera predeterminada; si especifica el nombre del segundo parámetro de salida (como en este ejemplo textdata), la función almacenará los datos de texto en el archivo de Excel en la variable.

Supongamos que tenemos un archivo de Excel con una ruta de archivo de D:\桌面\data.xlsx, que contiene los siguientes datos:

A B C
1 10 20 a
2 30 40 b

Luego, podemos usar el siguiente código de MATLAB para leer los datos numéricos y de texto en este archivo:

[data, textdata] = xlsread('D:\桌面\data.xlsx');

Después de ejecutar el código anterior, MATLAB almacenará los datos numéricos en el archivo de Excel en datala variable y almacenará los datos de texto en textdatala variable. En este punto, puede ingresar estos dos nombres de variables en la ventana de comandos de MATLAB para ver su contenido:

data =

    10    20
    30    40

textdata =

  2×1 cell 数组

    {2×1 cell}
    {2×1 cell}

>> textdata{1}

ans =

    'a'

>> textdata{2}

ans =

    'b'
  • Se puede ver que MATLAB leyó con éxito los datos en el archivo de Excel y los almacenó en la variable correspondiente.
  • Entre ellos, textdatala variable es una matriz de celdas de 2x1 y cada celda almacena una columna de datos de texto.
  • Podemos usar llaves {}para acceder al contenido de la celda, como textdata{1}acceder a los datos de texto en la primera columna.

1.2 Obtener de TXT

usar carga ()

% 生成线性间距向量,返回包含 1 和 30 之间的 8(默认100)个等间距点的行向量

a=linspace(1,30,8);
save d:\exper.txt a -ascii;
b=load('d:\exper.txt')

% save d:\exper.txt a -ascii; 把a以ASCII码的形式存储在D盘的exper.txt中,若不存在会自动创建

% b=load('d:\exper.txt') 读取'd:\exper.txt'中的数据,并储存在变量b中

usar lectura de texto ()

[A,B,C,...]=textread('filename','format',N,'headerlines',M)

% filename 表示txt文件名称

% format 表示所读取变量的字段格式

% N 表示读取的次数

% headerlines 表示从第M+1行开始读取

Utilice la lectura literal para ignorar los caracteres coincidentes https://blog.csdn.net/jk_101/article/details/106495696

[name,type,x,y,answer]=textread('D:t.txt','%s Type%d %f %n %s',2,...
                                'headerlines',1)

% 格式Type%d只显示%d,因为原数据为Type1,Type2,Type3,Type4

Por ejemplo:

La primera línea de mydata.dat es la siguiente:

Sally    Type1 12.34 45 Yes

 Lea la primera línea del archivo, ignorando los caracteres Escriba en el segundo campo.

[names, typenum, x, y, answer] = textread('mydata.dat', ...
'%s Type%d %f %d %s', 1)

devolver

names = 
    'Sally'
typenum =
    1
x =
  12.34000000000000
y =
    45
answer = 
    'Yes'

Usar fopen() fread() fclose() 

ejemplo:

Leer los caracteres en el archivo .m (también es posible leer el archivo txt)

% 用函数fopen打开文件,r代表只读形式打开,w代表写入形式打开,a代表在文件末尾添加内容

fid=fopen('D:\CRM4.m','r'); % fid=fopen('D:\CRM4.m','w')/fid=fopen('D:\CRM4.m','a')

% 以字符形式读取整个文本
var=fread(fid,'*char');

% 将中文字段转换为相应的2字节代码,否则输出可能会乱码
var=native2unicode(var)
fclose(fid)

Use fprintf() para escribir información en txt

fprintf('file','format',a1,a2...)

% file 表示文件路径

% format 表示数据写入类型

% a 表示要写入的数据内容

1.3 Obtener de la imagen

%% 读取图片
clc, clear, close all
a1=imread('000.bmp');
% 获得像素矩阵行数列数
[m,n]=size(a1);
 
%% 批量读取图片
dirname = 'ImageChips'; % 'ImageChips'文件夹
 
files = dir(fullfile(dirname, '*.bmp'));

%% fuiifile用法
% f = fullfile('myfolder','mysubfolder','myfile.m')
% f = 'myfolder/mysubfolder/myfile.m'
%% dir用法
% dir name 列出与 name 匹配的文件和文件夹。如果 name 为文件夹,dir 列出该文件夹的内容。使用绝对
% 或相对路径名称指定 name。name 参数的文件名可以包含 * 通配符,路径名称可以包含 * 和 ** 通配符。 
% 与** 通配符相邻的字符必须为文件分隔符。
 
a=zeros(m,n,19); % 创建全零数组19个m*n数组,共19张图片
pic=[];
for ii = 1:length(files)
  filename = fullfile(dirname, files(ii).name);
  a(:,:,ii)=imread(filename); % 将该图片信息读取到a的第ii个数组里
  pic=[pic,a(:,:,ii)]; % 拼接图像
end
double(pic);
figure
imshow(pic,[])

% imshow(I,[low high]) 显示灰度图像 I,以二元素向量 [low high] 形式指定显示范围

% 若为[],使用 [min(I(:)) max(I(:))] 的显示范围。换句话说,I 中的最小值是黑色,最大值是白色

1.4 Obtener del video 

Use el VideoFileReader de la caja de herramientas de visión 

%% 读取视频数据
% 从视频文件中读取视频帧、图像和音频样本

videoFReader = vision.VideoFileReader('vippedtracking.mp4');
% 播放视频文件
videoPlayer = vision.VideoPlayer;
while ~isDone(videoFReader)
% 当来自有限数据源的数据取完时(通常是因为已读取所有数据),isDone(obj)返回true
% ~逻辑非
  videoFrame = step(videoFReader); % 运行videoFReader算法,返回输出参数
  step(videoPlayer, videoFrame); % 对videoFrame运行videoPlayer算法
end
release(videoPlayer); %释放资源
 
%% 设置播放方式
% 重置播放器

reset(videoFReader) % 将图形对象属性重置为其默认值
% 增加播放器的尺寸
r = groot; % r = groot 用于存储图形根对象的句柄。要使用圆点表示法设置根属性,首先必须存储句柄
scrPos = r.ScreenSize;
%  Size/position is always a 4-element vector: [x0 y0 dx dy]
dx = scrPos(3); dy = scrPos(4);
videoPlayer = vision.VideoPlayer('Position',[dx/8, dy/8, dx*(3/4), dy*(3/4)]);
% 指定左下角和右上角的坐标
while ~isDone(videoFReader)
  videoFrame = step(videoFReader);
  step(videoPlayer, videoFrame);
end
release(videoPlayer);
reset(videoFReader)
 
%% 获取视频中的图像
videoFrame = step(videoFReader);
n = 0;
while n~=15
  videoFrame = step(videoFReader);
  n = n+1;
end
figure, imshow(videoFrame) % 获得第15张图像
release(videoPlayer);

Uso de la función fopen en Matlab https://blog.csdn.net/jk_101/article/details/106494232

2. Preprocesamiento de datos

Tres elementos de la calidad de los datos: precisión, integridad, consistencia (formatos inconsistentes, etc.)

Dos factores que influyen: credibilidad (cuánto confían en él los usuarios), explicabilidad (si es fácil de entender)

Conversión de tipo de datos https://zhuanlan.zhihu.com/p/217597511 

Manejo de valores faltantes:

En general, los registros pueden ser eliminados, imputados y no procesados. https://blog.csdn.net/yunlinzi/article/details/90300113

método imputable descripción del método
Imputación media/mediana/moda

Dependiendo del tipo de valor de atributo,

Utilice la media/mediana/moda de los valores de los atributos para la imputación.

usar valor fijo

Reemplace los valores de atributo que faltan con una constante.

Por ejemplo, el valor vacante del atributo "salario básico" de los trabajadores migrantes ordinarios en una fábrica en Guangzhou,

Puede usar el salario estándar de los trabajadores migrantes ordinarios en Guangzhou en 2015, que es de 1895 yuanes por mes,

El método consiste en utilizar un valor fijo.

imputación más cercana Encuentre la muestra más cercana en el registro a la muestra faltante para esta imputación de valor de atributo
método de regresión

Para las variables con valores faltantes, se establece un modelo de ajuste basado en los datos existentes y los datos de otras variables (variables dependientes) relacionadas con él para predecir los valores de los atributos faltantes.

Interpolación

El método de interpolación consiste en utilizar puntos conocidos para establecer una función de interpolación adecuada f(x),

El valor desconocido se reemplaza aproximadamente por el valor de la función f(x,) obtenido del punto correspondiente.

Interpolación y Ajuste

La diferencia y conexión entre interpolación y ajuste.

1. Contacto

    Todos se basan en un conjunto de datos conocidos en la práctica para construir una función aproximada que pueda reflejar la ley del cambio de datos.

2. Diferencia

    El problema de interpolación no necesariamente obtiene la forma de expresión de la función aproximada, sino que solo encuentra el valor correspondiente al punto desconocido a través del método de interpolación.

El ajuste de datos requiere la expresión de una función de aproximación específica.

método de interpolación

        Se seleccionan diferentes tipos de funciones de interpolación, y el efecto de aproximación es diferente. Generalmente, hay:

( 1 ) Interpolación del algoritmo del vecino más cercano (interpolación unidimensional)

( 2 ) Algoritmo de interpolación lagrangiana (interpolación unidimensional)

( 3 ) Algoritmo de interpolación bilineal (interpolación bidimensional)

( 4 ) interpolación lineal por partes (interpolación bidimensional)

( 5 ) Interpolación spline cúbica (interpolación bidimensional)

( 6 ) Interpolación Kriging (geografía)

( 7 ) Algoritmo de interpolación de peso de distancia inversa (geografía)

Ejemplo: dentro de 11 horas de 1:12 a 12:00 , mida la temperatura cada 1 hora, los valores de temperatura medidos son: 5 , 8 , 9 , 15 , 25 , 29 , 31 , 30 , 22 , 25 , 27 , 24 . Intente estimar el valor de la temperatura cada 1/10 de hora.

hours=1:12;

temps=[5 8 9 15 25 29 31 30 22 25 27 24];

h=1:0.1:12;

t=interp1(hours,temps,h,'spline');

plot(hours,temps,'+',h,t,hours,temps,'r:')     %作图

xlabel('Hour'),ylabel('Degrees Celsius’)

%1.先在三维坐标画出原始数据,画出粗糙的温度分布曲线图.

%输入以下命令:

x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
mesh(x,y,temps)

%2.以平滑数据,在 x、y方向上每隔0.2个单位的地方进行插值.

再输入以下命令:
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi',yi,'cubic');
mesh(xi,yi,zi)

%画出插值后的温度分布曲面图.

Ejemplo La profundidad del agua z en algunos puntos ( x , y ) medidos en cierta área del mar está dado por la siguiente tabla. El calado del barco es de 5 pies, cuyos lugares están en el área rectangular ( 75 , 200 ) × ( - 50 , 150 ) El barco debe evitar entrar. 

%1.输入插值基点数据  
%2.在矩形区域(75,200)×(-50,150)进行插值。 
%3. 作海底曲面图 
%4.作出水深小于5的海域范围,即z=5的等高线

%程序一:插值并作海底曲面图

x  =[129.0  140.0  103.5  88.0  185.5  195.0  105.5 157.5  107.5  77.0  81.0  162.0  162.0  117.5 ];

y =[ 7.5  141.5  23.0  147.0  22.5  137.5  85.5      -6.5  -81  3.0  56.5  -66.5  84.0  -33.5 ];

z =[ 4  8  6  8  6  8  8  9  9  8  8  9  4  9 ];

x1=75:1:200;

y1=-50:1:150;

[x1,y1]=meshgrid(x1,y1);

z1=griddata(x,y,z,x1,y1,'v4');

meshc(x1,y1,z1)


%程序二:插值并作出水深小于5的海域范围。

x1=75:1:200;

y1=-50:1:150;

[x1,y1]=meshgrid(x1,y1);

z1=griddata(x,y,z,x1,y1,'v4');  %插值

z1(z1>=5)=nan;   %将水深大于5的置为nan,这样绘图就不会显示出来

meshc(x1,y1,z1)


Manejo de valores atípicos:

  • Los valores atípicos son datos que se desvían de la mayoría de los datos del conjunto de datos.
  • A partir del valor de los datos, se expresa como: los datos en el conjunto de datos se desvían de la media en más de dos desviaciones estándar,
  • Los datos que se desvían más de tres desviaciones estándar de la media se denominan valores atípicos altamente anormales.

Extracción de valores atípicos de wavelet

     Las partes irregulares, como los puntos de mutación y los puntos singulares de la señal, suelen contener información importante, y la singularidad de la señal general se puede dividir en dos casos:

  1.     La amplitud de la señal cambia repentinamente en un momento determinado, provocando que la señal sea discontinua.Este tipo de mutación se denomina primer tipo de punto de discontinuidad ;  
  2.     La señal es suave en apariencia y la amplitud no tiene cambios repentinos, pero el diferencial de primer orden de la señal tiene un cambio repentino y el diferencial de primer orden es discontinuo.Este tipo de cambio repentino se denomina segundo tipo de discontinuidad .
  3.      La aplicación del análisis wavelet puede detectar la posición, el tipo y la magnitud del punto de mutación en la señal.

Ejemplo: Detección del primer tipo de discontinuidad

  • En este ejemplo, la discontinuidad de la señal se debe a la adición repentina de una señal sinusoidal con características de alta frecuencia en la segunda mitad de la señal sinusoidal con características de baja frecuencia.
  • En primer lugar, se utiliza el análisis de transformada de Fourier para analizar la señal en el dominio de la frecuencia y se encuentra que no se ha detectado ningún punto de mutación.
  • Luego use el análisis wavelet para analizar, el resultado demuestra que puede detectar con precisión la posición del cambio repentino de la amplitud de la señal, es decir, el momento en que se agrega la señal de alta frecuencia.
load freqbrk;

x=freqbrk;%对信号进行傅里叶变换

f=fft(x,1024);

f=abs(f);

figure;

subplot(211);
plot(x);

subplot(212);
plot(f);
  
%使用db6小波进行6层

[c,l]=wavedec(x,6,’db6’);

figure(2);
subplot(811);
plot(x);
ylabel('x');
 
%对分解的第六层低频系数进行重构

a=wrcoef('a',c,l,'db6',6); 
subplot(812);
plot(a);
ylabel('a6');

for i=1:6  %对分解的第6层到第1层的高频系数分别进行 
    d=wrcoef('d',c,l,'db6',7-i);
    subplot(8,1,i+2);
    plot(d);
    ylabel(['d',num2str(7-i)]);
end

Descomposición del primer tipo de mutación empírica por wavelet db6 

El segundo tipo de descomposición wavelet db4

load nearbrk;

x=nearbrk;

%使用db4对信号进行2层分解

[c,l]=wavedec(x,2,‘db4’); 

subplot(411);
plot(x);
ylabel('x');

%对分解的第六层低频系数进行重构

a=wrcoef('a',c,l,'db4',2);

subplot(412);     
plot(a);     
ylabel('a2');

for i=1:2%对分解的第2层到第1层的高频系数进行重构
    a=wrcoef('a',c,l,'db4',3-i);
    subplot(4,1,i+2);
    plot(d);
    ylabel(['d',num2str(3-i)]);
end

Eliminar datos no válidos al principio y al final https://blog.csdn.net/FDA_sq/article/details/124250130

Ejemplo: proceso de alimentación de fresado

  • La primera parte de los datos de la señal tiene los datos de que la señal se vuelve gradualmente más grande debido al proceso de alimentación de fresado ,
  • Al final de los datos en la figura correspondiente, hay una parte de los datos gradualmente más pequeña causada por la retracción del fresado final .
  • Estos dos datos son datos de señal de fresado anormales, por lo que son datos no válidos que deben eliminarse manualmente.

principio:

  1. Calcular el valor crítico de los datos no válidos al principio y al final de cada proceso de corte : el valor Q del cuartil superior de los datos originales de cada corte.
  2. El encabezado de los datos originales busca los primeros datos mayores o iguales a Q de adelante hacia atrás como la posición final de la alimentación, y elimina todos los datos de señales anteriores menores a Q;
  3. De la misma forma, la cola busca los primeros datos mayores o iguales a Q de atrás hacia adelante como posición de inicio de retracción de la herramienta, y todos los datos posteriores menores a Q son eliminados.
%使用函数:

Q=quantile(x,y,z)         

% x表示要求的矩阵或者向量;y的取值为表示要求的分位数,

% 如四分之一中位数0.25,四分之三中位数0.75等;

% z的取值为1或者2,若值为1则表示按列求四分位数,若为2表示按行求四分位数。

% Q为计算的上四分位值,常用大小为 (1,n).


%注:对于向量,
Q2=quantile(raw_data,0.75,1)

%等同于Q3 = prctile(raw_data,75)

Eliminación de valores duplicados https://blog.csdn.net/qq_43657442/article/details/118891434

Utilice  la función única  ,

Eliminar filas duplicadas directamente

unique(A,'rows',setOrder)

%其中,setOrder 参数有两种取值,默认是’sorted’ 即去掉重复后排序输出(以第一个元素大小位依据),

%另一个是'stable' 代表去掉重复后按原来顺序输出

 ejemplo

>> a=[1 0 1;1 0 1; 1 1 1;2 5 1; 1 1 1;0 1 2 ;0 4 5 ;0 1 2]

a =

     1     0     1
     1     0     1
     1     1     1
     2     5     1
     1     1     1
     0     1     2
     0     4     5
     0     1     2

>> unique(a,'row','stable')

ans =

     1     0     1
     1     1     1
     2     5     1
     0     1     2
     0     4     5

>> unique(a,'row')

ans =

     0     1     2
     0     4     5
     1     0     1
     1     1     1
     2     5     1

>> 

Eliminar filas duplicadas por columna

[C,ia,ic] = unique(dataRed(:,1:2),'rows'):

% 基于1、2列的数据查找dataRed中所有的唯一行。
% 指定三个输出以返回索引向量 ia 和 ic。

uA = dataRed(ia,:)

%使用 ia 对 dataRed 进行索引并检索包含前两列中元素的唯一组合的行。
  1. dataRed(:,1:2) Se seleccionan  dataRed las dos primeras columnas de todas las filas . Esto generalmente se hace para encontrar combinaciones únicas de ciertas columnas en los datos sin tener en cuenta otras.
  2. 'rows' El argumento le dice a MATLAB que considere el orden de cada fila al compararlas, por lo que solo las filas que contienen el mismo valor en el mismo orden se consideran iguales.
  3. Ejecute  unique la función que trata las dos primeras columnas como una matriz y devuelve los resultados ordenados para todas las filas únicas. Los resultados se almacenan en tres variables  C, ia y ,  respectivamente ic .

Específicamente, los parámetros de salida contienen lo siguiente:

  • C: Una matriz que contiene todas las filas únicas de la matriz de entrada, en orden de aparición.
  • ia: Un vector que contiene todos los índices de fila únicos para la columna seleccionada en la matriz de entrada. Para cada fila en la matriz de entrada, ia el elemento correspondiente en es  C el índice de la fila correspondiente en .
  • ic: Un vector, del mismo tamaño que la matriz de entrada, que contiene el índice de cada fila en la matriz de entrada para indicar su  C posición en .

Supongamos que existe una matriz dataRedque contiene lo siguiente:

dataRed = [1, 2, 3;
           4, 5, 6;
           7, 8, 9;
           1, 2, 3;
           4, 5, 6];

 Llame a uniquela función:

[C,ia,ic] = unique(dataRed(:,1:2),'rows');

 MATLAB luego devuelve los siguientes resultados:

C =

     1     2
     4     5
     7     8

ia =

     1
     2
     3

ic =

     1
     2
     3
     1
     2

Eso significa que dataRedlas únicas combinaciones de las dos primeras columnas en la matriz son (1, 2), (4, 5)y (7, 8).

iaEl vector contiene Clas posiciones de las filas en la matriz,

Y icel vector indica la posición dataRedde cada fila en la matriz Cen la matriz. 

matlab encuentra posiciones no vacías para eliminar datos duplicados/eliminar NaN - 0-126480643-blog-118891434.235%5Ev35%5Epc_relevant_increate_t0_download_v2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

encontrar una ubicación no vacía

Uso de la función Find () en matlab  https://blog.csdn.net/qq_45767476/article/details/109081132

función buscar()

​idx = find(isnan(data));

  • Se utiliza para buscar todos los índices de subíndices que contienen elementos NaN (no es un número) en un vector o matriz.
  • Específicamente, esta declaración realiza los siguientes pasos:
  • isnan(data) devuelve una matriz lógica del mismo tamaño que data, que contiene información sobre si cada elemento de data es NaN.
  • Si NaN, esta posición es 1; de lo contrario, es 0.
  • La función find () toma los subíndices de los elementos distintos de cero en el parámetro de entrada, por lo que para la matriz lógica devuelta por isnan (datos),
  • find() devolverá un vector de subíndice que contiene las ubicaciones de los 1 elementos.
  • Por lo tanto, el resultado final es un vector de columna idx, que contiene los índices de subíndice de todos los valores de NaN en los datos.
idx = find(~isnan(data));
  • Se utiliza para encontrar todos los índices de subíndices en un vector o matriz que no contienen elementos NaN (No es un número).
  • Específicamente, esta declaración realiza los siguientes pasos:
  • isnan(data) devuelve una matriz lógica del mismo tamaño que data, que contiene información sobre si cada elemento de data es NaN.
  • Si NaN, esta posición es 1; de lo contrario, es 0.
  • En esta declaración, el operador ~ niega la matriz lógica, es decir, 1 se convierte en 0 y 0 se convierte en 1.
  • Por lo tanto, la matriz lógica resultante representa las posiciones de todos los elementos en los datos que no son NaN.
  • La función find() toma los subíndices de los elementos distintos de cero en el argumento de entrada, por lo que para la matriz lógica devuelta por ~isnan(datos),
  • find() devolverá un vector de subíndice que contiene las ubicaciones de los 1 elementos.
  • Por lo tanto, el resultado final es un vector de columna idx, que contiene los índices de subíndice de todos los valores que no son NaN en los datos.

Por ejemplo, suponga que tiene una matriz de 5x5 Aque contiene valores de 5 NaN.

Puede encontrar dónde se encuentran estos valores de NaN con:

A = [1 2 NaN 4 5;
     6 NaN 8 9 10;
     11 12 13 NaN 15;
     16 17 18 19 NaN;
     NaN 21 22 23 24];

idx = find(isnan(A))

resultado

idx =

     3
     7
    12
    20
    25

Esto significa que Alos elementos 3, 7, 12, 20 y 25 de la matriz son NaN. 

Donde residen estos valores no NaN se pueden encontrar con: 

A = [1 2 NaN 4 5;
     6 NaN 8 9 10;
     11 12 13 NaN 15;
     16 17 18 19 NaN;
     NaN 21 22 23 24];

idx = find(~isnan(A))

 resultado

idx =

     1
     2
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    21
    22
    23
    24

uso de la función isnan() https://blog.csdn.net/Intangilble/article/details/83786589

isnan(A):
%判断数组的元素是否是NaN。(True for Not-a-Number.)

%用法说明:
B = isnan(A)

%返回一个与A相同维数的数组;
%若A的元素为NaN(非数值),在对应位置上返回逻辑1(真),否则返回逻辑0(假)。

ejemplo

(InF significa infinito positivo; -InF significa infinito negativo; NaN significa cantidad no numérica;)

>>isnan([pi NaN Inf -Inf])


ans =

  1×4 logical 数组

   0   1   0   0

[data  in] = unique(data(:, n)):
 
b = unique(A)
b = unique(A,'rows')
[b,m,n] = unique(...)
 
​

%描述
%1、b = unique(A)  返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。
%A可以是一个字符串的单元阵列。

%2、b = unique(A,'rows')  返回的是A中的唯一的行数。

%3、[b,m,n] = unique(...)  也返回索引向量m和n,使得B = A(M) 和 A= B(N). 
%m的每一个元素是最大的下标,使得B = A(M). 对于行的组合,B = A(M,:) 和 A= B(N,:) 

Elimine valores atípicos y procese sin problemas https://www.bilibili.com/read/cv9279417

Regresión de "secuencia a secuencia" con aprendizaje profundo https://ww2.mathworks.cn/help/deeplearning/ug/sequence-to-sequence-regression-using-deep-learning.html

Supongo que te gusta

Origin blog.csdn.net/qq_53011270/article/details/130609471
Recomendado
Clasificación