55587


以下のようにtxtファイルに書き出された７つのセンサのデータから  
外れ値のインデックスを求めるプログラムを書きました。  
このプログラムをMATLABで実行できるように書き換えたいのですが、  
データ分析はPythonでしかやったことがなく

[code]

    data = load ('data.txt');
    
[/code]

でPythonコードのdata = np.array(data)辺りまでの処理ができたということは  
見当がつくのですが、以降がわかりません。

txtファイル内のデータは以下とします。

[code]

    [1, 2, 3, 4, 5, 7, 7, 1, 2, 4, 4, 5, 6, 7, 1, 2, 2, 12, 6, 6, 7]
    
[/code]

実行プログラム

[code]

    import numpy as np
    import pandas as pd
    
    num_sensors = 7  # センサ数
    thresh = 5  # 中央値との差がこの値より大きい場合は異常値と判断
    
    data= pd.read_table("data.txt", header=None)
    data = data.values.tolist()
    #data = np.array([1, 2, 3, 4, 5, 7, 7, 1, 2, 4, 4, 5, 6, 7, 1, 2, 2, 12, 6, 6, 7])  
    data = np.array(data)
    
    data = data.reshape(-1, num_sensors)
    outliner = np.abs(data - np.median(data, axis=0, keepdims =True)) >thresh
    indices = np.where(outliner.ravel())
    print(indices)
    
    #出力
    17
    
[/code]

回答を受けての追記  
Pythonの方のプログラムだと  
**data = data.reshape(-1, num_sensors)**  
の記述があるので、入力データが以下の場合

[code]

    [1, 2, 3, 4, 5, 0, 7, 1, 2, 4, 4, 5, 6, 7, 1, 2, 2, 12, 6, 6, 7]
    
[/code]

出力は  
[5,17]

ですが、MATLABではどこで **data = data.reshape(-1, num_sensors)** の処理をやっているのかわかりません。

データがベクトルという前提条件もリストでしか保持していないので、説明いただけますと幸いです・


CC BY-SA 4.0
2019-06-06T08:40:58.023
55577
2019-06-07T03:08:50.293
2019-06-07T01:33:14.293
3060
question
python python3 matlab
Pythonで書いた外れ値のインデックスを求めるプログラムをMATLABで実現する方法


`data`は既にベクトルになっているとします。

[code]

    data = [1, 2, 3, 4, 5, 7, 7, 1, 2, 4, 4, 5, 6, 7, 1, 2, 2, 12, 6, 6, 7];
    
    num_sensors = 7;
    thresh = 5;
    
    data = reshape(data, [], num_sensors);
    
    % 中央値
    medianOfData = median(data);
    
    % 中央値からの差を格納したベクトル
    differences = abs(data - medianOfData);
    
    % 差がthresh以上の要素のインデックス
    outliers = find(differences > thresh);
    
    % 18; インデックスは1から始まるので、Pythonより1大きい
    disp(outliers)
    
[/code]


CC BY-SA 4.0
2019-06-06T13:23:34.837
55587
2019-06-07T03:08:50.293
2019-06-07T03:08:50.293
3605
3605
55577
answer