Python 如何修改张量的列

Python 如何修改张量的列,python,tensorflow,Python,Tensorflow,我想做一个特征函数,比如:我有一个张量X,如果X[:,I]>1,那么X[:,I]=0,否则X[:,I]=1。但是我想保留X的形状 我已经尝试过多次重塑,但在取消堆叠X并更改列表的值后,找不到完全相同的X形状 def g_tf(自身、t、X): x_unpacket=tf.unstack(x,num=None,axis=1) 已处理=[] 对于未包装的小x英寸x英寸: 张量_10=tf.cast(tf.constant([1.0])[None,None],tf.float64) 张量_1=tf.

我想做一个特征函数,比如:我有一个张量X,如果X[:,I]>1,那么X[:,I]=0,否则X[:,I]=1。但是我想保留X的形状

我已经尝试过多次重塑,但在取消堆叠X并更改列表的值后,找不到完全相同的X形状


def g_tf(自身、t、X):
x_unpacket=tf.unstack(x,num=None,axis=1)
已处理=[]
对于未包装的小x英寸x英寸:
张量_10=tf.cast(tf.constant([1.0])[None,None],tf.float64)
张量_1=tf.重塑(张量_10,tf.形状(x_小))
bool=tf.greater(小x,张量1,name=None)
bool_重塑=tf.重塑(boule,[])
结果张量=tf.cond(boule_整形,λ:tf.常数(1),λ:tf.常数(0))
已处理。追加(结果\u张量)
输出=tf.stack(已处理,0)
打印(输出)#张量(“正向/堆栈:0”,形状=(50,),数据类型=int32)
Output_u=tf.cast(Output,dtype=tf.float64)
X_new=X#X的形状:形状=(?,50),dtype=float64)
print(X_new[1])#张量(“向前/跨步切片_190:0”,shape=(50,),dtype=float64)
X_new=X_new[1]。分配(输出)#它们具有相同的形状:形状=(50,)
最终运算=tf.减少总和(X新,1,keepdims=True)
返回最后一步
ValueError:
尝试将“输入”转换为张量,但失败。错误:不支持任何值。
此错误发生在以下行:
X\u new=X\u new[1]。分配(输出)

我希望我正确地理解了您在这里尝试执行的操作。我真的不明白你在这里做什么。但是下面的解决方案应该适用于您试图实现的目标

例如,如果有数组
[[2,3],[1,0],[0,0]]
则希望输出为
[[1,1],[0,0],[0,0]]
。希望我没弄错。如果这是你所需要的,那么下面的方法应该有效

import tensorflow as tf

# some random dataset
x = tf.random.normal(shape=(5,10),mean=2.0, stddev=0.5)

# Getting the colums of the data
x_unpack = tf.unstack(x, axis=1)

processed =[]
for x_col in x_unpack:
  ones = tf.ones_like(x_col)
  # Checks if all values in x_col are greater than one
  cond_tensor = tf.reduce_all(tf.greater(x_col, ones)) 
  # Get the resulting column
  res = tf.cond(cond_tensor, lambda: tf.ones_like(x_col),lambda: tf.zeros_like(x_col)) 
  processed.append(res)

out = tf.stack(processed, axis=1)

with tf.Session() as sess:
  print(sess.run(out))

非常感谢!这是工作,这正是我想要做的如果你对答案满意,请接受它作为正确的答案:)对不起,这是我在这里的第一个问题,现在它完成了!:)