我有一个包含整数的一维张量,例如[3,2,1,2,1,2,3,1,1,],我想计算每个整数出现多少次。我想用另一个一维张量表示输出,即输出上方的张量为[0,4,3,2]。
我知道这可以在Tensorflow的Python API中完成,例如使用 tf.unique_with_counts,但我在Tensorflow.js API中没有找到实现此目的的方法。
答案 0 :(得分:1)
我找到了一个解决方案,方法是使用tf.oneHot创建一个张量,该张量在1D张量中的每个元素给定的索引处只有一个1,而在其他所有位置都为零,即形式为[0,0,1,0]在1D张量中为“ 2”,然后沿第0轴求和。
代码是
const amounts = tf.tensor1d([3,2,1,2,1,2,3,1,1,],'int32');
const counts = tf.oneHot(amounts, 4);
const axis = 0;
counts.sum(axis); // Outputs [0, 4, 3, 2]
答案 1 :(得分:1)
更通用的方法是,在展平张量上使用字数算法,如下所示
const amounts = tf.tensor1d([3.09,2,1,2,1,2,3,1,1, 3.09]);
wc = amounts.dataSync().reduce((a, b) => a[b] ? {...a, [b]: ++a[b]} : {...a, [b]: 1}, {})
const k = tf.data.array(Object.keys(wc).map(v => ({k: v})))
const v = tf.data.array(Object.values(wc).map(v => ({v: v})))
const r = tf.data.zip([k, v]).map(x => {return {k: x[0].k, v: x[1].v}})
await r.forEach(e => console.log(JSON.stringify(e)));