Tensorflow:对张量中的特定元素求和/生成数组

时间:2017-08-04 09:35:16

标签: python 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次的每个位置乘以i的第vel个元素。

numpy非常简单,有一个for:

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_looppositions需要每个'行的相同大小,但我每次都有不同的位置数。出于同样的原因,我每次都无法单独工作,并使用tf.concat更新最终的scatter_update张量。有帮助吗?也许使用times [0.1, 0.1, 0.2, 0.2] posit [58.98962402, 58.9921875, 60.00390625, 60.00878906] vel [0.99705114,0.99974157] 或变量分配?

根据vijai m的回答,我在numpy和tensorflow代码之间的差异高达1.5%。您可以使用这些数据进行检查

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]

他们返回

public int solution(final int N) {

//Convert number to Binary string
String bin = Integer.toString(N, 2);

System.out.println("binary equivalent = " + bin);
int gap = 0;
int maxGap = 0;


for (int i = 1; i < bin.length(); i++) {

  if (bin.charAt(i) == '0') {
    gap++;
  }
  else if (bin.charAt(i) == '1') {

    if (gap > maxGap) {
      maxGap = gap;
    }
    gap = 0;
  }

  }
 return maxGap;
}

1 个答案:

答案 0 :(得分:1)

你的numpy代码不起作用。我希望这就是你要找的东西:

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