-1

add_to_file 関数でファイルを作成し、別のプログラムがそのファイルを入力として受け取るプログラムを作成しています。

ファイルには、名前、開始位置、説明、終了位置の 4 つの列があります。

プログラムが行うべきことは、ファイルを numpy 配列に読み込み、モーションの終了位置の少なくとも 1 つが少なくとも 1 つと同じになる配列を本質的に作成することによって、もっともらしい「モーション シーケンス」を作成することです。続くモーションの開始位置の

def make_sequence(size,array):
    count = 0
    sequence = [array[0]]
    result = [array[0,0]]
    for row in array[1:size]:
        if row[1] == sequence[count][3]:
            sequence.append(row)
            result.append(row[0])
            count += 1
        else:
            pass
    return result

これが何をしているのか、ファイルから作成された配列を取得し、新しい配列 (結果) を作成して、新しい配列が動きの名前だけになるようにしますが、開始位置が正確であるため、隣り合った動きのみが流れます。前のモーションの終了位置と同じ!これが私の問題です:

いくつかの動きは、さまざまな位置で開始および終了できます。私が書いたものは、モーションごとに 1 つの開始位置と 1 つの終了位置しか取ることができません。

質問:位置の値の文字列がカンマで区切られた値、つまり (a、b、c、d) の場合、関数が流れるすべてのモーションを返しますか?

編集:

これは、コードで実行できるようにしたいことの例です

入力:

row_1 = ["Name1", "1,3,4,5", "Description", "2"]
row_2 = ["Name2", "5,3", "Description", "4"]
row_3 = ["Name3", "2", "Description", "1"]
row_4 = ["Name4", "1", "Description", "7,3"]
row_5 = ["Name5", "3", "Description", "5,9,4"]
row_6 = ["Name6", "2", "Description", "7"]
row_7 = ["Name7", "7", "Description", "2"]
row_8 = ["Name8", "1", "Description", "4"]
row_9 = ["Name9", "4", "Description", "2"]
data = np.array((column_index,row_1,row_2,row_3,row_4,row_5,row_6,row_7,row_8,row_9))
print make_sequence(7,array)

出力:

[Name1,Name3,Name4,Name5]

この出力は、名前が「Name1」のrow_1で自動的に開始されるため、次の行が読み取られ、その行の開始位置が、前の行に追加された終了位置と同じである場合に得られます。正しい順序で、その名前が結果配列に追加されます。

入力のサイズが 7 だったので、これは最初の 7 行に対してのみ行われます。

4

1 に答える 1

1

さて、ここで 2 つの質問があります。1 つはデータ処理に関するもので、生データ ファイルから必要な情報を抽出する方法です。必要なのは、名前 (列 0)、開始位置 (列 1 の最初の要素)、および終了位置 (列 3 の最後の要素) です。これは次のようになります。

import numpy as np

dat = np.array([["Name1", "1,3,4,5", "Description", "2"],
    ["Name2", "5,3", "Description", "4"],
    ["Name3", "2", "Description", "1"],
    ["Name4", "1", "Description", "7,3"],
    ["Name5", "3", "Description", "5,9,4"],
    ["Name6", "2", "Description", "7"],
    ["Name7", "7", "Description", "2"],
    ["Name8", "1", "Description", "4"],
    ["Name9", "4", "Description", "2"]])

#since you only want the 7 initial columns
dat = dat[0:7,:]

#extract second and fourth columns
c1 = dat[:,1]
c2 = dat[:,3]
names = dat[:,0]

#get the start position via string manipulation
startpos = []
for item in c1:
    startpos.append(item.split(',')[0])

startpos = np.array(startpos).astype(np.int32)

#get the end position via string manipulation
endpos = []
for item in c2:
    endpos.append(item.split(',')[-1])

endpos = np.array(endpos).astype(np.int32)
print startpos
print endpos

涼しい。次のように、startpos と endpos に従う必要があります。

def followpath(a1,a2):
    needle = 1
    path = []
    for ii,item,newneedle in zip(np.arange(a1.size)+1,a1,a2):
        if item == needle:
            path.append(ii)
            needle = newneedle
    return np.array(path) - 1

thepath = followpath(startpos,endpos)
print names[thepath]

これは私に与えます:

['Name1' 'Name3' 'Name4' 'Name5']
于 2013-04-19T22:04:06.843 に答える