Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy矢量化相对距离_Python_Numpy_Vectorization - Fatal编程技术网

Python Numpy矢量化相对距离

Python Numpy矢量化相对距离,python,numpy,vectorization,Python,Numpy,Vectorization,很抱歉问了一个初学者numpy的问题,但我已经在谷歌上搜索了一段时间,我不知道如何将一些涉及索引本身的东西矢量化 import numpy as np #Sample array start= np.array([[[1,2,3],[62,63,12],[12,35,56]],[[27,53,34],[33,43,64],[3,75,43]],[[23,53,54],[23,65,97],[34,23,53]]]) f= np.array([[[2,1],[-1,0],[1,-1]],[[0,0

很抱歉问了一个初学者numpy的问题,但我已经在谷歌上搜索了一段时间,我不知道如何将一些涉及索引本身的东西矢量化

import numpy as np
#Sample array
start= np.array([[[1,2,3],[62,63,12],[12,35,56]],[[27,53,34],[33,43,64],[3,75,43]],[[23,53,54],[23,65,97],[34,23,53]]])
f= np.array([[[2,1],[-1,0],[1,-1]],[[0,0],[1,1],[-1,-1]],[[0,-1],[-1,-1],[-1,-2]]])
#f.shape(x,y,2) and start is (x,y,3)
end=np.empty(start.shape)
for x in range(f.shape[0]):
    for y in range(f.shape[1]):
        print (x,y)
        end[x][y]= start[f[x,y,0] + x][f[x,y,1] + y]
#Output 
"""
[[[ 23.  65.  97.]
  [ 23.  65.  97.]
  [ 33.  43.  64.]]

 [[ 27.  53.  34.]
  [ 34.  23.  53.]
  [ 62.  63.  12.]]

 [[ 34.  23.  53.]
  [ 27.  53.  34.]
  [ 27.  53.  34.]]]
"""
print(end)

您基本上需要向f的每个元素添加该元素的整数位置。我们可以使用numpy.meshgrid构建与f形状匹配的索引数组:

索引和f具有相同的形状,因此添加它们以生成所需的索引数组idx\u f。最后,在开始时将idx_f作为索引数组应用


如果您创建了一个示例,我们将更容易帮助您。公平地说,更新问题使其成为一个完整的示例您得到的输出是否符合要求?
import numpy as np

start = np.array([[[1,2,3],[62,63,12],[12,35,56]],[[27,53,34],[33,43,64],[3,75,43]],[[23,53,54],[23,65,97],[34,23,53]]])
f = np.array([[[2,1],[-1,0],[1,-1]],[[0,0],[1,1],[-1,-1]],[[0,-1],[-1,-1],[-1,-2]]])

m,n,_ = f.shape
x = np.arange(n)
y = np.arange(m)
xx,yy = np.meshgrid(x,y)
indices = np.stack((yy.ravel(),xx.ravel()),axis=-1).reshape(m,n,-1)

# [[[0 0]
#   [0 1]
#   [0 2]]
# 
#  [[1 0]
#   [1 1]
#   [1 2]]
# 
#  [[2 0]
#   [2 1]
#   [2 2]]]
idx_f = f + indices

# [[[ 2  1]
#   [-1  1]
#   [ 1  1]]
#
#  [[ 1  0]
#   [ 2  2]
#   [ 0  1]]
#
#  [[ 2 -1]
#   [ 1  0]
#   [ 1  0]]]

end = start[idx_f[:,:,0],idx_f[:,:,1]]

# [[[23 65 97]
#   [23 65 97]
#   [33 43 64]]
# 
#  [[27 53 34]
#   [34 23 53]
#   [62 63 12]]
# 
#  [[34 23 53]
#   [27 53 34]
#   [27 53 34]]]