

下のプログラム内で（うじゃうじゃとかいてありすいません）

  * `n1=1` のとき
[code]     np.savetxt("data-1(n1の値).csv", data_del, delimiter=",")

    
[/code]

  * `n1=2` のとき
[code]     np.savetxt("data-2.csv", data_del, delimiter=",")

    
[/code]

・・・・  
というのを今まで手作業でn1=1-10まで打ち直し実行というのを繰り返してきたんですがこれを自動化したいです．

可能にする方法はありますか

[code]

    import numpy as np
    import pandas as pd
    from pandas import Series, DataFrame
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    data_path = 'data.csv'
    
    n0 = 64 
    n1 = 1   # ★★要変更1-10★★
    n2 = 1 
    n3 = 14                                                                
    
    # データの読み込み
    data_all = pd.read_csv(data_path,delimiter=",",skiprows=n1)
    data_all = np.array(data_all)
    
    srows1 = 2304*n1
    data_all2 = np.zeros([16*n2,n3])
    for j in range(n2):
        for n in range(n3):
            for i in range(16):
                data_all2[i+16*j,n] = data_all[srows1*j + 128*i:srows1*j + 64 + 128*i,n].mean()
    
    data_del = data_all2
    for i in range(n2):
        data_del = np.delete(data_del,14+15*i,0)
    for i in range(n2):
        data_del = np.delete(data_del,12+14*i,0)
    for i in range(n2):
        data_del = np.delete(data_del,4+13*i,0)
    for i in range(n2):
        data_del = np.delete(data_del,1+12*i,0)
        
    # データの保存
    data_del_t=data_del.T
    np.savetxt("data-1.csv", data_del, delimiter=",") # 1をnと対応させ1-10
    
[/code]


CC BY-SA 4.0
2020-11-13T08:05:38.370
71923
2023-08-22T02:06:05.670
2022-12-20T07:21:23.393
3060
42568
question
python
np.savetxtの保存名とプログラム内の数値を対応させる方法


変数の値を含んで文字列を組み立てるのは、いくつか方法がありますので、お好みのものを使えば良いでしょう。

  * @payaneco さんコメントのもの `"data-{}.csv".format(n1)`
  * 単純な連結 `"data-" + str(n1) + ".csv"`
  * f文字列 `f"data-{n1}.csv"`

他にも色々と方法はあるでしょう。

* * *

同時に、本当に`n1`とファイル名だけを1-10まで書き変えて10回実行しているなら、それらの処理を`for`ループの中に入れるとか、あるいは関数化してしまえば1回の実行で全部出来るようになります。

単純な`for`ループの考え方は以下です。  
`range(1,11)`で数値の範囲を指定することで、`1`から始めて`11`の1つ手前(=10)までの値を変数に入れてループさせます。

[code]

    for n1 in range(1,11):
        ## 繰り返す処理を記述
        print(f"data-{n1}.csv") ## 例えばこんな処理
    
[/code]

ファイル名に変数を指定した`np.savetxt`も繰り返し処理の中に入れれば良いので、以下のようになります。

[code]

    import numpy as np
    import pandas as pd
    from pandas import Series, DataFrame
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    data_path = 'data.csv'
    
    n0 = 64 
    # n1 = 1 ##ここでは不要 ★★要変更1-10★★
    n2 = 1
    n3 = 14
    
    for n1 in range(1,11): ## forの処理で n1 の数値を 1-10 に変化させてループ
        #データの読み込み
        data_all = pd.read_csv(data_path,delimiter=",",skiprows=n1)
        data_all = np.array(data_all)
    
        srows1 = 2304*n1
        data_all2 = np.zeros([16*n2,n3])
        for j in range(n2):
            for n in range(n3):
                for i in range(16):
                    data_all2[i+16*j,n] = data_all[srows1*j + 128*i:srows1*j + 64 + 128*i,n].mean()
    
        data_del = data_all2
        for i in range(n2):
            data_del = np.delete(data_del,14+15*i,0)
        for i in range(n2):
            data_del = np.delete(data_del,12+14*i,0)
        for i in range(n2):
            data_del = np.delete(data_del,4+13*i,0)
        for i in range(n2):
            data_del = np.delete(data_del,1+12*i,0)
    
        #データの保存
        data_del_t=data_del.T
        np.savetxt(f"data-{n1}.csv", data_del, delimiter=",") ## f文字列に変更して変数を組み込み #1をnと対応させ1-10
    
[/code]


CC BY-SA 4.0
2020-11-13T09:50:39.760
71928
2020-11-13T09:50:39.760
26370
71923
answer