如何在张量流中正确地将一个数组附加到另​​一个数组?

时间:2018-03-30 13:51:34

标签: python python-3.x numpy tensorflow

我目前在python中有2个ndarar,我使用zip来获取索引并迭代两个并将每个单元格从一个附加到另一个,类似于下面显示的内容。我现在想将此转换为tensorflow并基本上完全删除for循环。我认为这很容易,但我似乎正在处理很多形状问题,并认为是时候发布SO以找出正确的方法来做到这一点。

arr1的形状是(24,),arr2的形状是(24,5)

这是我试图引入TF的逻辑。

for id1, id2 in zip(arr1, arr2):
  row = id2.tolist()
  row.append(id1)
  finarr.append(row)

我已经尝试了很多东西,但是我当前的实现(低于显示的错误)仍然无效。

错误是:

  

:('除了。之外的所有输入数组维度   连接轴必须完全匹配',)

当前代码:

val = tf.transpose(tf.reshape(arr1, (-1, arr1.size)))
finarr= tf.concatenate([arr2, val], 0)

我是否认为这一切都错了?有没有更好的办法?

-------编辑--------

以下代码似乎是通过numpy执行连接的更优雅的方式,但我仍然没有找到等效的张量流。

finarr= np.column_stack((arr2, arr1))

1 个答案:

答案 0 :(得分:1)

您需要扩展arr1的维度,并沿最后一个轴连接。这是一种方法:

import numpy as np
import tensorflow as tf

arr1 = np.arange(24)
arr2 = np.arange(24 * 5).reshape(24, 5)
finarr_np = np.column_stack((arr2, arr1))

p1 = tf.placeholder(arr1.dtype, shape=arr1.shape)
p2 = tf.placeholder(arr2.dtype, shape=arr2.shape)
f = tf.concat([p2, p1[:, None]], -1)

with tf.Session() as sess:
    finarr_tf = sess.run(f, feed_dict={p1: arr1, p2: arr2})

assert (finarr_tf == finarr_np).all()