Python 在tensorflow中是否有一个函数用于进行转换,而这个转换是索引的函数?

Python 在tensorflow中是否有一个函数用于进行转换,而这个转换是索引的函数?,python,tensorflow,differential-equations,Python,Tensorflow,Differential Equations,我正在寻找(但完全找不到)tensorflow中的一个函数,该函数允许我对张量进行“映射” 地图 首先,我甚至不确定是否有“映射”功能?这意味着我可以将给定的f(x)应用于张量中的偶数项。e、 我想要这样的东西 def f(x): return x**2 Y = tf.Variable(np.array([[1.0, 2.0], [3.0, 4.0]]) Y = tf.map_function(X, f) 生成(显然,在适当地运行会话

我正在寻找(但完全找不到)tensorflow中的一个函数,该函数允许我对张量进行“映射”

地图

首先,我甚至不确定是否有“映射”功能?这意味着我可以将给定的f(x)应用于张量中的偶数项。e、 我想要这样的东西

def f(x):
  return x**2

Y = tf.Variable(np.array([[1.0, 2.0],
                          [3.0, 4.0]])

Y = tf.map_function(X, f)
生成(显然,在适当地运行会话之后)具有值的张量

Y = [[1.0, 4.0],
     [9.0, 16.0]]
这是否存在(对于一般的
f
——我意识到
tf.nn.relu
tf.nn.sigmoid?一方面,它似乎应该这样做,因为
map`是一个非常基本的操作。另一方面,它涉及到获取提供的python函数,并以某种方式将其转换为在GPU上执行,这听起来像是migh这是不可能的

我是不是想在这里得到月亮

**mapi*

如果存在这样一个函数,是否有一个版本允许我使用索引感知的
f

def f(x, i):
  if (i != [0, 0]):
    k2 = np.sum([x**2 for x in i])
  else:
    k2 = 1.0 # To avoid division by zero
  return (x / k2)

Y = tf.Variable(np.ones(shape=(2,3)))

Y = tf.mapi_function(X, f)
生产

Y = [[1.0, 1.0, 0.25],
     [1.0, 0.5, 0.2]]
如果这样的函数不存在,我是否可以(对于fixed
f
)通过从(稍微修改的)源构建tensorflow来添加它们

为什么我需要这样一个函数

我问这个问题的原因是我试图用张量流对偏微分方程进行数值积分。作为其中的一部分,我需要计算拉普拉斯(d^2/dx^2+d^2/dy^2+d^2/dz^2)u(x,y,z)。在场u(k_x,k_y,k_z)的傅里叶变换表示中,这涉及到除以k_x^2+k_y^2+k_z^2


我可以预先计算逆平方波数值的张量,然后按元素进行乘法。但这会占用大量内存。我怀疑从内存加载这些值也会比较慢。

在您想单独映射到每个
x,y,z
坐标的具体示例中,您可以很容易地实现这一点使用
tf.split()
tf.stack()
。也就是说,我假设你有一个输入张量(称之为
K
),大小为
[n,m,…,3]
;也就是说,最后一个维度索引
x,y,z
坐标。如果是这样,那么使用
tf.split()
K
分解为
Kx、Ky、Kz
。然后应用映射操作(我通常使用
tf.map\u fn()
),最后使用
tf.stack()
将东西重新堆叠在一起


如果我正确理解了设置,那么应该这样做。如果没有,请提供一个使问题具体化的最小工作示例;否则,我们最多只能猜测解决方案。

抱歉,我认为我对向量的x、y、z分量的讨论已经把水弄脏了。假设我谈论的是标量场,u_dft,repres设某个函数u(x,y,z)的DFT为整数。假设每个方向有32个配置点,因此u.shape=[32,32,32]和u_DFT.shape=[32,32,32]看,我想做的是将每个元素u_DFT[I,j,k]除以(I^2+j^2+k^2)。我无法拆分和堆叠,因为对于这三个维度中的每一个,我都要拆分32次!(我想这和连续做一样慢。)谢谢tf.map_fn!