如何创建从满足逻辑条件的矩阵中提取每个原始子的子矩阵?

时间:2017-02-27 14:57:56

标签: matlab if-statement matrix dataset

我有一个带有多个记录的* .txt文件,来自连接到Arduino的MPU6050。

我可以识别何时创建新记录,因为列时间从随机值重新开始,然后从前一个值开始(从不为0)。

该文件是一个nX7,其中包含时间,ax,ay,az,gx,gy,gz

我试图从单个矩阵中提取m个子记录,所以我定义了一个逻辑if。

  1. 如果时间i>时间i + 1跟踪原始矩阵的位置,并存储在子矩阵(rangematrix)中这个边界值。
  2. 从rangematrix创建一组子矩阵(子矩阵的总数将为[size(rangematrix,1)-1]。
  3. 我有土木工程师的背景,我是Matlab的菜鸟 感谢您的时间,感谢您的耐心等待。

    我尝试使用下面的代码来解决这个问题,但我认为这只是垃圾。

    %Open the file 
    filename= uigetfile ('.txt');
    fileID = fopen (filename);
    logmpu6050 =csvread(filename);
    fclose (fileID); 
    n=length(logmpu6050);
    %Count every time i>i+1 where i is the i,1 element of my dataset
    for i=1:n-1
    %Save the data of the i raw every time happens i>i+1
    if logmpu6050(i,1)>logmpu6050(i+1,1);
    rangematrix(i,:)= logmpu6050(i,:);
    end
    end
    % Create a new sets of matrices from boundary values
    

    我也在堆栈上阅读了很多问题,但我找不到解决方案:

    MATLAB: extract every nth element of vector

    Extract large Matlab dataset subsets

    MATLAB: Extract multiple parts of a matrix without using loops

    MATLAB: Extracting elements periodically

    Extract data from MATLAB matrix without for-loop

    How to extract a vector from a large matrix by index in MATLAB?

    How to extract a part of a matrix with condition in Matlab

1 个答案:

答案 0 :(得分:1)

您可以使用差异

filename= uigetfile ('.txt');
fileID = fopen (filename);
logmpu6050 =csvread(filename);
fclose (fileID); 
n=length(logmpu6050);
%Count every time i>i+1 where i is the i,1 element of my dataset
rangematrix = logmpu6050(diff(logmpu6050(:,1)) > 0,:);