2017-12-28 53 views
2

BFS出力配列に基づいて行単位で疎行列の要素を選択しようとしています。私のBFS出力がBFS出力に基づいて疎行列の要素を選択する方法

[1, 2, 3, 6, 4, 7, 5, 8, 11, 9, 12, 10, 13, 15, 14, 16, 17, 18, 19, 20] 

であり、例えば20x20の疎行列を持っているとします。

ここでは、BFS出力を行インデックスとして使用し、BFS出力配列とプロットと同じ順序でスパース行列から非ゼロ値を選択します。ここで私はいくつかの仕事をすることができますが、私が望むものを完全には私のコードです。上記のコードで

a = numpy.loadtxt('sparsematrix.txt', float, delimiter=',') # import data 
y = numpy.reshape(a, np.size(a)) 
pos = np.delete(y, np.arange(0, y.size, 19)) 

plt.plot(pos) 
plt.xlabel(sample) 
plt.ylabel(position) 

問題は:

  1. それは 私のBFS出力の定義された順序で行方向のすべての値を選択し、ではありません。 (行インデックス番号 としてBFS出力配列を使用して、0以外の値を1つずつ選択する必要があります)
  2. すべての値を選択します。偶数はゼロです。 - ゼロ以外の値だけを取得する方法
  3. インデックス作成は0から開始され、19に進みます。インデックス作成を1から開始します。
+1

あなたが望むものはすぐには分かりません。 1)マトリックスから、bfs出力配列のインデックスで指定された順序で行を選択します。 2)各行の最初の列から始まる選択された行の非ゼロ要素を選択します(順序は重要ですか?)3)非ゼロ要素のリストを表示しますか?例:bfs_output = [1,2,0];行列= [[0 3 1] [0 2 0] [4 0 0]];リスト= [2 4 3 1]。また、0ではなく1から始める索引は何ですか?なぜですか? –

+0

はい、あなたは絶対に正しいと仮定しています。 私はモデリングをしているので私には問題があります。ここでは順序はbfs_outputによって決定され、Row | Col:11行目、12行目、13行目...のように1行ずつ0以外の値を選択する必要があります。 2列目は21,22,23のようにしなければなりません。 bfs_outputが終了するまで選択を続けます。 私は生物学モデルをモデリングしているので、系は少なくとも1分子で初期値は0でなくてはなりません。したがって、分子数と一致させるのは簡単です。 私はこれについて少し質問がありますか? – Napster

+0

偉大な、私の答えはあなたの目的に適しています。確かにあなたの質問をしてください、私はできれば答えるとコメントに合うように十分小さい場合:) –

答えて

2

重要な更新

今、私はあなたがcompletlyクリスチャンの答えを読んで欲しかったものを手に入れます。私は既に与えられたものを補完する別の機能を作った。ここでは、プログラム全体を参照してください:新しい方法AnalyzeSparseMatrix(

sparseMatrix = ([0,4,5,0],[2,0,4,0],[0,3,3,0],[6,6,0,0]) 
iList = [3,1,2,4] 

def AnalyzeSparseMatrix(sMatrix, iList): 
    orderedArray = [] #The array you want as output 
    for i in iList: 
     orderedArray += AnalyzeRowWise(sMatrix[i-1]) #Add non-zero selected line from sparse matrix 
    return orderedArray #Returns a non-zero list ordered in the selected way by the BFS output list 

def AnalyzeRowWise(oldArray): 
    newMatrix = [] 
    #Code to analize row wise 
    for data in oldArray: 
     if(data != 0): #Condition 
      newMatrix.append(data) 
    return newMatrix 

#Test program 
print (AnalyzeSparseMatrix(sparseMatrix, iList)) #Output: [3,3,4,5,2,4,6,6] 

)の第2引数はBFS出力リストで、最初の引数は、スパース行列で、二つの引数を取ります。このメソッドはリストを返します。これは目的のリストです。ですから、たとえば、あなたが望む別のリストにそのリストを割り当てることができます。

finalOrderedList = AnalyzeSparseMatrix(sparseMatrix, iList) 

は、コードのほとんどすべての行は上記のコードでは、何をするかについての詳細を検索します。メートルから

bfs_output = list of row indexes where 1 is the first/top row of a matrix. 
matrix m = some matrix with elements that can be 0 or non-zero 
list l = a list composed of non-zero elements chosen from m 

要素が選択されている次のように:

+0

こんにちはコリン、ご意見ありがとうございます。これは、bfs出力を行インデックスとして使用して行列から要素を取得したいので、私にとってはうまくいかないでしょう。あなたの場合、bfs出力を使用し、bfs出力配列から非ゼロ値を与えますが、行列からは出力しません。 – Napster

+1

次に、メソッドの引数を "AnalyzeRowWise(oldMatrix)"に編集し、変数 "bfsOutput"を使用するすべての行を "oldMatrix"に変更します。メソッドの引数で割り当てるので、配列を "bfsOutput"に割り当てる行を取り除いてください。このように、このメソッドを使用して1D配列を解析し、配列内の0を取り除くことができます。これがうまくいくと教えてください。 –

+0

あなたのコメントとテストコードをお寄せいただきありがとうございます。私はこれを試してみました。また、1Dと2D配列データのための素晴らしいソリューションとバリエーションです。また、0以外の値を選択するオプションもあります。さらに、私はこれに関する質問があります。この出力「newMatrix」を配列として一部の関数に使用する場合は、配列の値が自動的に1つずつ関数に渡されますか?私はそれを定義する必要がありますか? – Napster

2

私は、これはあなたが望むものであると仮定してきた

  1. は、最初に示さメートルで、行、Rを選択/ bfs_outputの次の値

  2. rの最初の列から開始して、r以外の要素を選択します。

  3. 例えばbfs_output

にこれ以上の行インデックスまで

  • 繰り返しリットルに2で選択した要素を追加します。

            0 3 1 
    bfs_output = [2 3 1] & matrix = 0 2 0 ==> list = [2 4 3 1] 
                4 0 0 
    

    私は、これはあなたが何であるかであるかどうかわからないです後に。しかし、そうであれば、選択関数でnumpyのビルドを使用して、numpy配列から非ゼロ要素を選択し、必要な順序で行を選択することもできます。

    from io import StringIO 
    import numpy as np 
    
    bfs_output = [2,3,1] 
    file = StringIO(u"0,3,1\n0,2,0\n4,0,0") 
    
    matrix = np.loadtxt(file, delimiter=",") 
    
    # we are subtracting 1 from all elements in bfs_output 
    # in order to comply with indexes starting from 1 
    select_rows = matrix[np.subtract(bfs_output,1)] 
    select_rows_1d = np.reshape(select_rows,np.size(select_rows)) 
    list = select_rows_1d[select_rows_1d != 0] 
    
    print(list) # output = [2 4 3 1] 
    
  • +0

    こんにちはChristain、あなたのコメントとコードをありがとうございます。はい、これはまさに私が望んでいたものです。 – Napster

    関連する問題