嗨,我正在学习tensorflow,我有一个稀疏的数据集,它由三列组成,日期,键,排列。我想把这些数据存储在稀疏张量中,以bond作为一个维度,以date作为另一个维度,会让对这个张量的操作感觉很自然,如果你认为有更好的方法,一定要告诉我
我试着在张量的两个切片上执行算术,在给定的张量值不是空的情况下,我只在一个日期上加/减值,虽然我发现了一些函数可以帮助我完成这项任务,但我无法摆脱这样的感觉:我缺少一个真正简单的问题解决方案
使用以下数据:
import tensorflow as tf
tf.enable_eager_execution()
indicies = [[0, 0], [0, 1], [1, 0], [1, 2], [2, 2]]
values = [10 , 10 , 10 , 11 , 11 ]
spreads = tf.sparse.SparseTensor(indicies, values, [3, 3])
在上面的例子中,我打算用维度一来表示日期,用维度二来表示债券
tf.sparse.slice(spreads,[0,2],[3,1])
给出日期2
的所有价差,但显然SparseTensor
不支持减法,也不能使用tf.math.subtract
。所以我不再确定支持什么
具体来说,我想在上面的例子中完成的是减去所有其他日期的日期0
,前提是债券在这两个日期上都有价差。例如,债券0
出现在日期0
和1
中,而不是日期2
,所以我想从日期0
和1
中减去日期0
中的价差。
最终张量如下:
indicies2 = [[0, 0], [0, 1], [1, 0], [1, 2]]
output = [ 0 , 0 , 0, , 1 ]
tf.sparse.to_dense(tf.sparse(tf.sparse.SparseTensor(indicies2, output, [3, 3])))
tf.Tensor: id=128, shape=(3, 3), dtype=int32, numpy= array([[0, 0, 0], [ 0, 0, 1], [ 0, 0, 0]])
我想最简单的解决方法是使用tf.sparse.to_dense
,但是这样做会破坏使用SparseTensor
的全部意义,所以我不确定API文档中是否遗漏了使我的解决方案成为可能的内容,或者我是否完全错了使用SparseTensor
?
在一天结束的时候,如果一个张量的每个值与另一个张量匹配,我只想对它进行一些数学运算
更新:
我意识到我可以对其中一个切片应用tf.math/negative
来减去两个切片,问题是输出假设如果一个切片中的值丢失,那么可以假设它是某个默认值(零)
我不确定有没有什么简单的小把戏能让它那么容易地工作。我要么做密集计算要么自己写稀疏计算。这是一个有点棘手,所以可能只值得它,如果数据真的非常稀疏,你会节省大量的内存和计算。下面是一个方法:
对于您给出的示例,我得到的输出
(1, 2) => 1
和(2, 2) => 11
-(2, 2)
不受影响,因为2
在日期0
中没有扩散。这和你写的不一样,所以如果你不是这个意思,请告诉我相关问题 更多 >
编程相关推荐