2017-08-04 68 views
0

您好我有浮子[時間,位置]的座標的數組在稀疏格式特定元件,例如Tensorflow:總和/產品的陣列,以在一個張量

times = [0.1, 0.1, 1.5, 1.9, 1.9, 1.9] 
posit = [2.1, 3.5, 0.4, 1.3, 2.7, 3.5] 

和速度的陣列,例如

vel = [0.5,0.7,1.0] 

我在第i時間的veli個元素相乘每個位置。

在numpy的是很簡單的一個爲:

import numpy 

times = numpy.array([0.1, 0.1, 1.5, 1.9, 1.9, 1.9]) 
posit = numpy.array([2.1, 3.5, 0.4, 1.3, 2.7, 3.5]) 

vel = numpy.array([0.5,0.7,1.0]) 

uniqueTimes = numpy.unique(times, return_index=True) 
uniqueIndices = uniqueTimes[1] 
uniqueTimes = uniqueTimes[0] 

numIndices = numpy.size(uniqueTimes)-1 
iterator = numpy.arange(numIndices)+1 
for i in iterator: 
    posit[uniqueIndices[i-1]:uniqueIndices[i]] = posit[uniqueIndices[i-1]:uniqueIndices[i]]*vel[i-1] 

在tensorflow我可以收集到每一個我需要

import tensorflow as tf 

times = tf.constant([0.1, 0.1, 1.5, 1.9, 1.9, 1.9]) 
posit = tf.constant([2.1, 3.5, 0.4, 1.3, 2.7, 3.5]) 

vel = tf.constant([0.5,0.7,1.0]) 

uniqueTimes, uniqueIndices, counts = tf.unique_with_counts(times) 
uniqueIndices = tf.cumsum(tf.pad(tf.unique_with_counts(uniqueIndices)[2],[[1,0]]))[:-1] 

信息,但我想不出如何做產品。與int元素我可以使用稀疏密度張量和使用tf.matmul,但與float我不能。 此外,循環是困難的,因爲map_fnwhile_loop需要每個「行」相同的大小,但我有不同數量的位置在每次。出於同樣的原因,我不能每次單獨工作,並用tf.concat更新最終的positions張量。任何幫助?也許用scatter_update或變量賦值?


從vijai m回答,我在numpy和tensorflow代碼之間的差異達1.5%。您可以利用這些數據

times [0.1, 0.1, 0.2, 0.2] 
posit [58.98962402, 58.9921875, 60.00390625, 60.00878906] 
vel [0.99705114,0.99974157] 

檢查他們返回

np: [ 58.81567188 58.8182278 60.00390625 60.00878906] 
tf: [ 58.81567001 58.81822586 59.98839951 59.9932785 ] 
differences: [ 1.86388465e-06 1.93737304e-06 1.55067444e-02 1.55105566e-02] 
+0

你可以修復numpy代碼,並打印你想要的輸出。 –

+0

我很抱歉,複製粘貼錯誤:(編輯 – LolAsdOmgWtfAfk

+0

手動計算,結果的最後一個值是由60.00878906 * 0.99974157 = 59.9932785得到的? –

回答

1

您numpy的代碼不起作用。我希望這是你正在尋找的:

uniqueTimes, uniqueIndices, counts = tf.unique_with_counts(times) 
out = tf.gather_nd(vel,uniqueIndices[:,None])*posit 
+0

非常感謝你的回答,但是使用我的數據,即使是在float64中,它也會返回與numpy代碼差異高達1.5%的值,對於我的目的而言, – LolAsdOmgWtfAfk

+0

上面的numpy代碼給我的錯誤值與手動計算相比,你能發佈一個numpy的例子,它給出了1.5%的差異嗎? –

+0

你確定嗎?我剛剛檢查並且numpy代碼給我的手動計算完全一樣的值:'[1.05 1.75 0.28 1.3 2.7 3.5]',你有相同的值嗎? – LolAsdOmgWtfAfk