2013-04-20 15 views
1

是可能的索引numpy的阵列序列的元组,使得tpl[0]是一个的X坐标和tple[1]序列是ý坐标的序列。一个只需要用元组索引数组,因此:other_array[tpl]有没有更好的方法从numpy数组获取x,y坐标的元素?

我现在有存储在二维数组坐标,使得载体ar[0]对应于我的X值和ar[1]对应于我的ý值。

现在,我通过创建一个元组索引other_arrayother_array((ar[0], ar[1]))。不幸的是,这个操作是在一个紧密的循环中运行的,所以我可以挤出的任何数量的性能都是非常有益的。如果执行10^8次,创建元组可能会增加一些开销!有没有更快,更经济的方式索引xy坐标?

非常感谢!

+1

我想知道是否有更好的方法来优化您的紧密循环 - 以某种方式在整个阵列上操作通常比一次一个元素快得多。也许显示你的内在循环,并解释它的作用会给你带来更大的收益...... – Floris 2013-04-20 01:02:05

+0

@Floris的确,我正在努力使用逻辑索引而不是循环来操作数组。 – blz 2013-04-20 01:06:27

回答

1

你可以用另一个数组索引一个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]) 

如果不回答你的问题,你能在您的问题,一个简单的工作的例子,显示目前你在做什么?

+0

虽然你没有明确地创建一个元组,但'other_array .__ getitem__'作为参数接收的是元组''(ar [0],ar [1])',所以无论如何创建了一个元组。这并不重要,因为OP关于创建两个元素元组的担心是没有根据的:即使每个元素都是一个具有gazillion元素的数组,该元组也只有两个指针。 – Jaime 2013-04-20 03:48:26

+0

@Jaime,谢谢你的澄清。 – 2013-04-20 15:38:16

相关问题