对于张量块的tf.tile

时间:2018-03-21 13:42:34

标签: python matrix tensorflow repeat

我有以下张量 a ,我想以两种不同的方式使用tf.tile来获得不同的结果。

a.eval() = array([[ 1],
       [ 2],
       [ 3],
       [10],
       [20],
       [30]], dtype=int32)

我知道我能做到:

a_rep = tf.tile(a, [1,2])

a_rep = tf.reshape(rep, (12, 1)) 

为了获得:

a_rep.eval() = array([[ 1],
       [ 1],
       [ 2],
       [ 2],
       [ 3],
       [ 3],
       [10],
       [10],
       [20],
       [20],
       [30],
       [30]], dtype=int32)

我应该如何使用tf.tile来获得以下结果?我基本上想要具有特定大小的张量块重复而不是只有一个值。

a_rep.eval() = array([[ 1],
       [ 2],
       [ 3],
       [ 1],
       [ 2],
       [3],
       [10],
       [20],
       [30],
       [10],
       [20],
       [30]], dtype=int32)

非常感谢你!

1 个答案:

答案 0 :(得分:3)

类似的技巧,你平铺第二个维度,但在新的第三维度上堆叠“组”:

     @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//esto es lo que hacereferencia al xml donde vamos a meter la info
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);//aqui le asignamos el valor del view al viewHolder

            return new ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {// este metodo es el que se encarga de establecer la conexion entre el adaptador y la clase Viewholder ( a la cual le asignamos el xml)
            holder.etiLugares.setText(listalugares.get(position).getLugares());// asi se asignan los textos
            holder.Foto.setImageResource(listalugares.get(position).getFoto());//asi se asignan las fotos
            if(position%3==0)
            holder.Foto.setOnClickListener(this);

        }

输出:

import tensorflow as tf

with tf.Session() as sess:
    a = tf.constant([[ 1], [ 2], [ 3], [10], [20], [30]], dtype=tf.int32)
    group_size = 3
    repeats = 2
    result = tf.reshape(tf.tile(tf.reshape(a, (-1, 1, group_size)), (1, repeats, 1)),
                        (-1, 1))
    print(sess.run(result))

这假设数组中的元素数可以被size组整除。如果你想支持拥有最后一个“部分组”,你可以用完整的组完成上述操作,独立地平铺最后一位并连接。