2017-03-03 27 views
2
tf_coo = tf.SparseTensor(indices=np.array([[0, 0, 0, 1, 1, 2, 3, 9], 
              [1, 4, 9, 9, 9, 9, 9, 9]]).T, 
         values=[1, 2, 3, 5,1,1,1,1], 
         shape=[10, 10]) 

は、私は、エラーメッセージ初期化テンソル

InvalidArgumentError (see above for traceback): indices[4] = [1,9] is repeated 
    [[Node: SparseToDense = SparseToDense[T=DT_INT32, Tindices=DT_INT64, validate_indices=true, _device="/job:localhost/replica:0/task:0/cpu:0"](SparseTensor/indices, SparseToDense/output_shape, SparseTensor/values, SparseToDense/default_value)]] 

が、それは彼らに、インデックスと値の二つのリストを構築強行することはできません取得しますか?私は以前coo_matrixを使っていますが、これはこれを非常にうまく解決します。どんな助け?

EDIT: 私は関数sort_indices()を使用したcsr_matrixを作成して解決し、それをcoo_matrixに変換しました。そこから私はちょうどSparseTensor

tf.SparseTensor(indices= (coo_martix.row, coo_martix.col), values= coo_matrix.data, dense_shape=coo_martix.shape) 
+0

あなたは答えとしてあなたのソリューションを置く必要があります。 – daknowles

答えて

0

を作成するだけindices内の重複[1,9]を削除します。

from __future__ import print_function 
import tensorflow as tf 
import numpy as np 
tf_coo = tf.SparseTensor(indices=np.array([[0, 0, 0, 1, 2, 3, 9], 
              [1, 4, 9, 9, 9, 9, 9]]).T, 
         values=[1, 2, 3, 1,1,1,1], 
         dense_shape=[10, 10]) 

print('tf_coo: {0}'.format(tf_coo)) 
print('tf_coo.get_shape(): {0}'.format(tf_coo.get_shape())) 
+0

ええ、私が得たデータにはdoubleとcoo_matrixが含まれています。既存の要素に新しいインデックスを追加するだけです。最初の[1,9] = 4、2番目の[1,9] = 1の場合、マトリックスは5になります。 –

+0

@MarcusLagerstedt私はSparseTensorの動作が異なっていると思います。 –

+0

「AttributeError:型オブジェクト 'coo_matrix'に属性 '行がありません」というエラーメッセージが表示される – mgokhanbakal