

以下のプログラムでXを指定したときのYの値を表示するようにしました．そこでこのYの値を1列に並べてcsvファイルに保存しようとしましたがa=np.array(f_CS(xnew))ではiが40の時の要素しか反映されず一列に並べる方法がわかりませんでした．

[code]

    import pandas as pd
    from scipy.interpolate import interp1d
    import numpy as np
    import matplotlib.pyplot as plt
    date="1214"
    x=np.array([0, 6, 11 , 20, 30, 40])  
    y=np.array([92, 105, 114 , 125, 148, 141])  
    
    
    f_line = interp1d(x, y)
    f_CS = interp1d(x, y, kind='cubic')
    
    time_list=np.array([0, 3, 11 , 20, 30, 40])
    
    #for plot
    xnew =np.linspace(0, 40, num=50)
    plt.plot(x, y, 'o')
    plt.plot(xnew, f_CS(xnew), '-')
    
    for i in time_list:
        print('X =  ',i, 'の時の Yの値 = ', str(f_CS(i)))  
    a=np.array(f_CS(xnew))
    np.savetxt(f"{date}-target",a, delimiter=",")
    
[/code]


CC BY-SA 4.0
2021-01-17T03:50:54.537
73357
2021-01-23T12:00:38.540
2021-01-23T12:00:38.540
3060
42568
question
python python3
for文で得た要素を1列目に並べて保存する方法


[numpy.savetxt](https://numpy.org/doc/stable/reference/generated/numpy.savetxt.html)
のパラメーター `fname` は, filename or file handle

ファイル名の指定は, (`numpy.savetxt` に限らず大体において)一度きりの使用を目的としているようです。  
何回呼び出そうが, 新規にファイル作成・書き込む … ので結果的に最後の書き出ししか残りません。  
ファイルハンドルを使う必要があります。

[code]

    with open(f"{date}-target", 'w') as fp:
        for i in time_list:
            print(f'X = {i:2} の時の Yの値 = {f_CS(i)}')
            a = np.array(f_CS(xnew))
            np.savetxt(fp, [a], delimiter=",")
    
[/code]

* * *

追記

50等分ではなく`time_list`に基づいた値, ならば, 次のようにできます

[code]

    for i in time_list:
        print(f'X = {i:2} の時の Yの値 = {f_CS(i)}')
    
    with open(f"{date}-target", 'w') as fp:
        np.savetxt(fp, f_CS(time_list), fmt='%s')
    
[/code]


CC BY-SA 4.0
2021-01-17T06:04:56.183
73362
2021-01-17T17:53:07.643
2021-01-17T17:53:07.643
43025
43025
73357
answer


組み込み関数open()を使用してテキストファイルを作成します。

[code]

    import pandas as pd
    from scipy.interpolate import interp1d
    import numpy as np
    import matplotlib.pyplot as plt
    
    date="1214"
    x=np.array([0, 6, 11 , 20, 30, 40])  
    y=np.array([92, 105, 114 , 125, 148, 141])  
    
    
    f_line = interp1d(x, y)
    f_CS = interp1d(x, y, kind='cubic')
    
    time_list=np.array([0, 3, 11 , 20, 30, 40])
    
    #for plot
    xnew =np.linspace(0, 40, num=50)
    plt.plot(x, y, 'o')
    plt.plot(xnew, f_CS(xnew), '-')
    
    with open(f"{date}-target", 'w') as f:
        for i in time_list:
            print('X =  ',i, 'の時の Yの値 = ', str(f_CS(i))) 
            f.write(str(f_CS(i)) + '\n')
    
[/code]


CC BY-SA 4.0
2021-01-17T14:13:27.360
73370
2021-01-17T14:13:27.360
39819
73357
answer