我写了这段代码:
reshape = tf.reshape(word_level, [-1, 100])
Wb = tf.Variable(tf.zeros([100, 100]))
C = tf.matmul(reshape ,Wb)
输出为[[0,-1],[1,0],[2,1]]
它有效,但有没有办法完全删除循环?
答案 0 :(得分:1)
你的代码很好恕我直言。它可读,简洁,并且清楚地表明您希望修改alist
。
如果你想避免任何显式循环,你可以使用numpy数组并使用np.stack
:
import numpy as np
a = np.array([[0, 1], [1, 2], [2, 3]])
b = np.array([2, 3, 4])
np.column_stack([a, b])
输出:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4]])
答案 1 :(得分:0)
>>> alist = [[0], [1], [2]]
>>> blist = [-1, 0, 1]
>>> [a + [b] for a, b in zip(alist, blist)]
[[0, -1], [1, 0], [2, 1]]
会做你想要的(不修改alist),虽然它不是很好
答案 2 :(得分:0)
如果您不介意将元组列表作为结果,我发现此解决方案非常易读。
>>> alist = [[0], [1], [2]]
>>> blist = [-1, 0, 1]
>>> import itertools as it
>>> list(zip(it.chain(*alist), blist))
[(0, -1), (1, 0), (2, 1)]
如果您必须有列表清单:
list(list(el) for el in zip(it.chain(*alist), blist))
基本上,我将变量alist
解压缩到位置参数中,然后传递给itertools.chain()
。这会产生一个平面列表[0, 1, 2]
。之后,您可以简单地zip
两个列表,并在不使用for循环的情况下获得所需的结果。它不是最快但有效的解决方案。