Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 从基于3D矩阵的2D矩阵中的位置获取值_Python_Numpy_Indexing_Array Broadcasting - Fatal编程技术网

Python 从基于3D矩阵的2D矩阵中的位置获取值

Python 从基于3D矩阵的2D矩阵中的位置获取值,python,numpy,indexing,array-broadcasting,Python,Numpy,Indexing,Array Broadcasting,假设我有一个numpy矩阵:data=np.random.rand(200,50,100)并且有我需要的位置值:locs=np.random.randint(50,size=(200,2)) 如何获得形状矩阵(200,2100)?基本上,我想从数据中获取locs指定位置的值 如果我这样做:data[locs],我最终得到一个形状矩阵(200,2,50,100),而不是(200,2100) 根据要求更新了更多详细信息: 如果我们有: data = np.arange(125) reshaped =

假设我有一个numpy矩阵:
data=np.random.rand(200,50,100)
并且有我需要的位置值:
locs=np.random.randint(50,size=(200,2))

如何获得形状矩阵
(200,2100)
?基本上,我想从
数据
中获取
locs
指定位置的值

如果我这样做:
data[locs]
,我最终得到一个形状矩阵
(200,2,50,100)
,而不是
(200,2100)

根据要求更新了更多详细信息:

如果我们有:

data = np.arange(125)
reshaped = np.reshape(data, (5, 5, 5))
locs = [[3, 4], [2, 1], [1, 3], [3, 3], [0, 0]]
然后执行类似于
data[locs]
的操作应该会得到以下输出:

array([[[ 15,  16,  17,  18,  19],
        [ 20,  21,  22,  23,  24]],

       [[ 35,  36,  37,  38,  39],
        [ 30,  31,  32,  33,  34]],

       [[ 55,  56,  57,  58,  59],
        [ 65,  66,  67,  68,  69]],

       [[ 90,  91,  92,  93,  94],
        [ 90,  91,  92,  93,  94]],

       [[100, 101, 102, 103, 104],
        [100, 101, 102, 103, 104]]])

高级索引的结果将是索引的维度上的索引形状
data[locs]
相当于
data[locs,:,:]
,因此您的形状将是
locs.shape+data.shape[1://code>,或
(200,2,50,100)

您似乎要求使用
locs
索引
数据的轴1,使轴0与
locs
中的行保持同步。为此,您需要沿轴1使用
LOC
索引,并在轴0中提供从0到200的索引

重要的是要记住,所有高级索引必须以相同的形状广播。由于
LOC
是成型的
(200,2)
,第一个索引必须是成型的
(200,1)
(200,2)
,才能正确广播。我将展示前者,因为它更简单、更有效

data = np.random.rand(200, 50, 100)
locs = np.random.randint(50, size=(200, 2))
rows = np.arange(200).reshape(-1, 1)

result = data[rows, locs, :]

用一个小例子来说明“地点”是什么意思。您有一个
(200,50,100)
输入和一个
(200,2)
索引。您实际上打算如何将其映射到输出?为
循环编写一个
,也是一个很有用的工具。我想说的是,输出的形状本身并不能告诉你什么。内容非常重要。我已经回答了您的问题,但请澄清问题。有很多方法可以获得
200
维度。我确实希望轴1与轴0保持同步。这样做有效!非常感谢你!很高兴它成功了。谢谢你更新这个问题。