说我有一个矩阵:
X = [
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[2, 0, 0, 3, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 4, 0, 0, 0]
]
但它以稀疏格式存储:
# [row, column, value]
X_sparse = [
[1, 2, 1],
[3, 0, 2],
[3, 3, 3]
[6, 1, 4],
]
我也有一个载体
b = [1,2,3,4,5]
我想将X_sparse
作为数据传递给TensorFlow,然后将其与b
相乘(即np.dot(X, b)
)。在TensorFlow中执行此操作的正确方法是什么?此外,这是一个玩具示例,而在现实生活中X
有许多行和列,所以我不想使用它转换为非稀疏格式。
答案 0 :(得分:3)
如果不使用密集张量表示(SELECT DISTINCT f.name, i.name, changes.a, changes.b, src, dest, port FEOM changes INNER JOIN firewall f ON changes.a = f.id INNER JOIN interface i ON changes.b = i.id ORDER BY changes.id DESC;
),我看不到一种简单的方法。然而,Tensorflow是为大型矩阵的操作而构建的,所以在很多情况下它应该不是问题...
一个简单的例子:
tf.sparse_tensor_to_dense()
答案 1 :(得分:0)
那时可能没有更好的选择了,现在有一个功能-转换为稠密后进行矩阵乘法会使整个事情变得毫无意义...
import tensorflow as tf
import numpy as np
A_vals = np.array([
[1, 2, 1],
[3, 0, 2],
[3, 3, 3],
[6, 1, 4],
])
A_sparse = tf.SparseTensor(A_vals[:,:2], tf.cast(A_vals[:,2], tf.float32), [7, 5])
b = tf.constant([1,2,3,4,5], tf.float32)
# sparse-dense matrix multiplication
res = tf.sparse.sparse_dense_matmul(A_sparse, b[:,None])