Performance 有没有更好的方法从numpy数组中获取具有x,y坐标的元素?

Performance 有没有更好的方法从numpy数组中获取具有x,y坐标的元素?,performance,numpy,indexing,Performance,Numpy,Indexing,可以使用序列元组索引numpy数组,使得tpl[0]是x坐标序列,tple[1]是y坐标序列。我们只需要用元组对数组进行索引,因此:other\u array[tpl] 我目前将坐标存储在2D数组中,这样向量ar[0]对应于我的x值,ar[1]对应于我的y值 现在,我正在通过创建一个元组为other\u数组编制索引:other\u数组((ar[0],ar[1])。不幸的是,这个操作是在一个紧密的循环中运行的,所以我能挤出的任何性能都是非常有益的。如果执行10^8次,创建元组可能会增加一点开销!有

可以使用序列元组索引numpy数组,使得
tpl[0]
是x坐标序列,
tple[1]
是y坐标序列。我们只需要用元组对数组进行索引,因此:
other\u array[tpl]

我目前将坐标存储在2D数组中,这样向量
ar[0]
对应于我的x值,
ar[1]
对应于我的y值

现在,我正在通过创建一个元组为
other\u数组编制索引:
other\u数组((ar[0],ar[1])
。不幸的是,这个操作是在一个紧密的循环中运行的,所以我能挤出的任何性能都是非常有益的。如果执行10^8次,创建元组可能会增加一点开销!有没有一种更快、更精确的方法来索引这样一个xy坐标矩阵


多谢各位

您可以用另一个数组索引一个numpy数组,因此不必创建元组。例如:

In [199]: other_array
Out[199]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [200]: ar
Out[200]: 
array([[0, 2, 1],
       [1, 3, 0]])

In [201]: other_array[ar[0], ar[1]]
Out[201]: array([ 1, 13,  5])

如果这还不能回答您的问题,您能否在问题中包含一个简单的工作示例,说明您当前正在做什么?

您可以使用另一个数组为numpy数组编制索引,这样您就不必创建元组。例如:

In [199]: other_array
Out[199]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

In [200]: ar
Out[200]: 
array([[0, 2, 1],
       [1, 3, 0]])

In [201]: other_array[ar[0], ar[1]]
Out[201]: array([ 1, 13,  5])

如果这还不能回答您的问题,您能否在问题中加入一个简单的工作示例,说明您目前正在做什么?

我想知道是否有更好的方法来优化您的紧循环-以某种方式在整个阵列上操作通常比一次操作一个元素快得多。也许展示你的内心循环并解释它的作用会让你获得更大的收益…@Floris,事实上,我正在努力使用逻辑索引而不是循环对阵列进行操作。我想知道是否有更好的方法来优化紧循环—以某种方式对整个阵列进行操作通常比一次对一个元素进行操作快得多。也许展示你的内部循环并解释它的作用会让你获得更大的收益…@Floris,事实上,我正在努力使用逻辑索引而不是循环对数组进行操作。虽然你没有显式地创建元组,但是其他数组。uuuu getitem_uuuu
作为参数接收的是元组
(ar[0],ar[1])
,所以无论如何都会创建一个元组。这并不重要,因为OP对创建两元素元组的关注是毫无根据的:即使每个元素都是一个包含无数元素的数组,元组也只由两个指针组成。虽然您没有显式地创建元组,但是
其他\u数组。\uuu getitem\uuu
作为参数接收的是元组
(ar[0],ar[1])
,因此无论如何都会创建一个元组。这并不重要,因为OP对创建两个元素元组的关注是没有根据的:即使每个元素是一个包含无数元素的数组,元组也只由两个指针组成。