我目前在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))
答案 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()