1

まず、英語をお詫び申し上げます。それは私の第一言語ではありません。

これは、繰り返し負荷の3軸テストから得られたデータをソートするために私が開発しているプログラム用です。最初の列はセグメントです。3つのセグメントがサイクルを形成します。ロード、アンロード、一時停止。ロードの場合は約50データポイント、アンロードの場合は同じ、一時停止の場合は100データポイント。121でのロードから開始します。このセクションでは、4番目の列のロードフェーズとアンロードフェーズの最大値が必要です(インデックス3)。

私の配列があります:

[[  1.21000000e+02   1.00313720e+02   2.00015190e-02 ...,   2.25933480e-01
2.95645450e-01  -3.33373370e-01]
[  1.21000000e+02   1.00318600e+02   2.00071220e-02 ...,   2.25933600e-01
2.95629110e-01  -3.33358880e-01]
[  1.21000000e+02   1.00323490e+02   2.00045150e-02 ...,   2.25932690e-01
2.95642500e-01  -3.33374260e-01]
..., 
[  1.50000000e+02   1.10347900e+02   2.00072340e-02 ...,   2.24460500e-01
2.94727620e-01  -3.38975370e-01]
[  1.50000000e+02   1.10352780e+02   1.99971700e-02 ...,   2.24458930e-01
2.94705120e-01  -3.38966550e-01]
[  1.50000000e+02   1.10357670e+02   2.00063640e-02 ...,   2.24455860e-01
2.94704710e-01  -3.38963510e-01]]

そのループを実行した後:

g = np.loadtxt('test.txt')

Sigmad = []


DataCol = np.hsplit(g, g.shape[1])
DataCharge = DataCol[3] #Charge mean load
DataCycle = DataCol[0]


ld = 0 #ligne de début, start line of the load segment
fc = 0 #Fin de chargement, end line of the unload segment
seg1 = DataCycle[0] #Segment initial, numerical value of the first segment

chargemax = []
i = 0


while i < len(DataCycle):

    if DataCycle[i] == seg1 and DataCycle[i+1] == seg1 and DataCycle[i-1] == seg1 - 1:
        ld = i        

    elif DataCycle[i] == seg1 + 2 and DataCycle[i+1] ==  seg1 + 2 and DataCycle[i-1] == seg1 + 1 :

        fc = i
        print seg1
        chargemax.append(np.max(DataCharge[ld:fc]))
        ld = i + 1
        seg1 += 3

    i+=1

Sigmad.append(1000*np.mean(chargemax[:])/aire)

gが変更され、理由がわかりません。gは次のようになります。

[[  1.51000000e+02,   1.00313720e+02,   2.00020000e-02, ...,
      2.25933000e-01,   2.95645000e-01,  -3.33373000e-01],
   [  1.21000000e+02,   1.00318600e+02,   2.00070000e-02, ...,
      2.25934000e-01,   2.95629000e-01,  -3.33359000e-01],
   [  1.21000000e+02,   1.00323490e+02,   2.00050000e-02, ...,
      2.25933000e-01,   2.95642000e-01,  -3.33374000e-01],
   ..., 
   [  1.50000000e+02,   1.10347900e+02,   2.00070000e-02, ...,
      2.24460000e-01,   2.94728000e-01,  -3.38975000e-01],
   [  1.50000000e+02,   1.10352780e+02,   1.99970000e-02, ...,
      2.24459000e-01,   2.94705000e-01,  -3.38967000e-01],
   [  1.50000000e+02,   1.10357670e+02,   2.00060000e-02, ...,
      2.24456000e-01,   2.94705000e-01,  -3.38964000e-01]]

誰かがなぜこれをするのか私に説明してもらえますか?4列目の一部の値も変更されます。

ありがとう!

4

1 に答える 1

2

このセクションで:

DataCol = np.hsplit(g, g.shape[1])
DataCharge = DataCol[3] #Charge mean load
DataCycle = DataCol[0]

[...]

seg1 = DataCycle[0]

コピーを作成するのではなく、元の配列のビューに新しい名前を付けるだけです。だからあなたがするとき

seg1 += 3

ループ内では、自分g自身を変更しています。例えば:

>>> a = np.array([[1,2,3], [4,5,6]])
>>> b = a[0]
>>> b
array([1, 2, 3])
>>> b += 100
>>> b
array([101, 102, 103])
>>> a
array([[101, 102, 103],
       [  4,   5,   6]])

コピーが必要な場合は、.copy()明示的に呼び出すことができます。

>>> a = np.array([[1,2,3], [4,5,6]])
>>> b = a[0].copy()
>>> b
array([1, 2, 3])
>>> b += 1000
>>> b
array([1001, 1002, 1003])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
于 2013-01-15T02:49:46.303 に答える