我目前在 python 中有 2 个 ndarray,我使用 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)
我已经尝试了很多方法,但我当前的实现(低于显示的错误)仍然无法正常工作。
错误是:
: ('all the input array dimensions except for the concatenation axis must match exactly',)
当前代码:
val = tf.transpose(tf.reshape(arr1, (-1, arr1.size)))
finarr= tf.concatenate([arr2, val], 0)
我的想法是错的吗?有没有更好的办法?
--------编辑--------
下面的代码似乎是通过 numpy 执行连接的更优雅的方式,但我仍然没有找到等效的 tensorflow 。
finarr= np.column_stack((arr2, arr1))
最佳答案
您需要扩展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()
关于python - 如何在 tensorflow 中正确地将一个数组附加到另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49575741/