Python 如何索引张量并更改其值

Python 如何索引张量并更改其值,python,tensorflow,Python,Tensorflow,我正在使用tensorflow开发一个算法。 以下是所需代码的NumPy版本: x=[1,2,3,4,5,6,7,8,9,10] 集合={1,5,7} y=[0,0,0,0,0,0,0,0,0,0] 对于范围(10)内的i: 如果我是成套的: y[i]=x[i] 结果如下: y = [0,2,0,0,0,6,0,8,0,0] 如何在tensorflow中实现这一点? 在tensorflow中,有没有办法使用相同的逻辑实现这一点,不是在计算后将NumPy数组转换为张量,而是使用张量进行所有操作

我正在使用
tensorflow
开发一个算法。 以下是所需代码的
NumPy
版本:

x=[1,2,3,4,5,6,7,8,9,10]
集合={1,5,7}
y=[0,0,0,0,0,0,0,0,0,0]
对于范围(10)内的i:
如果我是成套的:
y[i]=x[i]
结果如下:

y = [0,2,0,0,0,6,0,8,0,0]
如何在tensorflow中实现这一点?
tensorflow
中,有没有办法使用相同的逻辑实现这一点,不是在计算后将
NumPy
数组转换为张量,而是使用张量进行所有操作(例如,使用张量对张量进行索引,如果索引在集合中,则通过x(张量)分配其值).

我不太明白你的问题。但这是我认为你需要的。可以使用以下命令将numpy数组转换为张量

test_array = np.array([1,2,3,4])
random1_array = tf.convert_to_tensor(test_array)
如果您不想使用numpy并将其转换为张量,这里有另一种方法

test_array = tf.Variable([1,2,3,4])
test_array_2 = tf.Variable([5,6,7,8])
 
现在你可以做各种计算,比如加、减等。
就像使用numpy数组一样。

在TensorFlow中可以这样做:

将tensorflow导入为tf
x=tf.常数([1,2,3,4,5,6,7,8,9,10])
集合=tf.常数([1,5,7])
y=tf.常数([0,0,0,0,0,0,0,0,0])
y2=tf.tensor\u scatter\u ndu update(y,tf.expand\u dims(集合,1),tf.gather(x,集合))
打印(y2.numpy())
# [0 2 0 0 0 6 0 8 0 0]
如果您的
y
始终由零组成(即,您只想“填充”由
set
给定的位置),则您可以执行以下操作:

将tensorflow导入为tf
x=tf.常数([1,2,3,4,5,6,7,8,9,10])
集合=tf.常数([1,5,7])
y2=tf.scatter\u nd(tf.expand\u dims(集合,1),tf.gather(x,集合),tf.shape(x))
打印(y2.numpy())
# [0 2 0 0 0 6 0 8 0 0]
作为一种替代方法,您也可以通过掩蔽来实现,尽管我认为它不应该更快:

将tensorflow导入为tf
x=tf.常数([1,2,3,4,5,6,7,8,9,10])
集合=tf.常数([1,5,7])
y=tf.常数([0,0,0,0,0,0,0,0,0])
s=tf.shape(x,out\u type=set.dtype)
mask=tf.math.reduce_any(tf.equal(tf.range(s[0]),tf.expand_dims(set,1)),0)
y2=tf.where(掩码,x,y)
#或者,如果y始终为零:
#y2=x*tf.dtypes.cast(掩码,x.dtype)
打印(y2.numpy())
# [0 2 0 0 0 6 0 8 0 0]

我不明白你在问什么。您的代码似乎工作正常。@Hoppo他的代码正常。他在问如何在tensorflow中做同样的事情…我知道有一种方法可以使用convert_to_tensor,有没有什么方法可以用tensor的方式来计算,而不是用numpy计算后再转换?谢谢