Python - 查找坐标多次已知的值

时间:2014-11-09 15:55:13

标签: python arrays numpy

我想得到几个我有坐标的值。 我的坐标是由" Coord" (形状:(3,3,2,3):X和Y在3次,2由于2坐标),我的值由"值" (形状:(3,3,3)3次)

换句话说,我想用" slice"及时连接值。对于每个职位......

我不知道如何进行...这里有一小部分阵列。

import numpy as np

Coord = np.array([[[[ 4.,  6., 10.],
     [  1.,   3.,   7.]],

    [[ 3.,  5.,  9.],
     [  1.,   3.,   7.]],

    [[ 2.,  4.,  8.],
     [  1.,   3.,   7.]]],


   [[[ 4.,  6., 10.],
     [  2.,   4.,   8.]],

    [[ 3.,  5.,  9.],
     [  2.,   4.,   8.]],

    [[ 2.,  4.,  8.],
     [  2.,   4.,   8.]]],


   [[[ 4.,  6., 10.],
     [  3.,   5.,   9.]],

    [[ 3.,  5.,  9.],
     [  3.,   5.,   9.]],

    [[ 2.,  4.,  8.],
     [  3.,   5.,   9.]]]])




Values = np.array([[[-4.24045246,  0.97551048, -5.78904502],
        [-3.24218504,  0.9771782 , -4.79103141],
        [-2.24390519,  0.97882129, -3.79298771]],

       [[-4.24087775,  1.97719843, -5.79065966],
        [-3.24261128,  1.97886271, -4.7926441 ],
        [-2.24433235,  1.98050192, -3.79459845]],

       [[-4.24129055,  2.97886284, -5.79224713],
        [-3.24302502,  2.98052345, -4.79422942],
        [-2.24474697,  2.98215901, -3.79618161]]])

稍后编辑

我尝试了一个简化的问题(没有时间优先)。我使用过" for循环"但 有些错误似乎存在......你认为这是解决这个问题的最佳方法吗?因为我的阵列很重要...... 400x300x100

Coord3 = np.array([[[ 2,  2.],
        [ 0.,  1.],
        [ 0.,  2.]],

       [[ 1.,  0.],
        [ 2.,  1.],
        [ 1.,  2.]],

       [[ 2.,  0.],
        [ 1.,  1.],
        [ 0.,  0.]]])


Coord3 = Coord3.astype(int)


Values2 = np.array([[0., 1., 2.],
       [3., 4., 5.],
       [6., 7., 8.]])


b = np.zeros((3,3))    

for i in range(Values2.shape[0]):
    for j in range(Values2.shape[1]):
        b[Coord3[i,j,0], Coord3[i,j,1]] = Values2[i,j]

b

1 个答案:

答案 0 :(得分:1)

你的第二个例子与花哨的索引相比很容易:

b = np.zeros((3,3), values2.dtype)
b[coord3[..., 0], coord3[..., 1]] = values2

原始问题有点困难,但我认为这可以解决它:

coord = coord.astype(int)

x_size = coord[..., 0, :].max() + 1
y_size = coord[..., 1, :].max() + 1
# x_size, y_size = coord.max(axis=(0, 1, 3)) + 1
nt = coord.shape[3]

b = np.zeros((x_size, y_size, nt), values.dtype)
b[coord[..., 0, :], coord[..., 1, :], np.arange(nt)] = values