您好我有浮子[時間,位置]的座標的數組在稀疏格式特定元件,例如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
時間的vel
的i
個元素相乘每個位置。
在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_fn
和while_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]
你可以修復numpy代碼,並打印你想要的輸出。 –
我很抱歉,複製粘貼錯誤:(編輯 – LolAsdOmgWtfAfk
手動計算,結果的最後一個值是由60.00878906 * 0.99974157 = 59.9932785得到的? –