我试图动态地从数组中获取第一个和最后一个元素。
因此,让我们假设数组有6个元素。
test = [1,23,4,6,7,8]
如果我尝试获取first and last = 1,8
、23,7
和4,6
。有没有办法让元素按这个顺序排列?我看了几个Link Link2的问题。我在这些链接的帮助下想出了这个原型。
#!/usr/bin/env python
import numpy
test = [1,23,4,6,7,8]
test1 = numpy.array([1,23,4,6,7,8])
len_test = len(test)
first_list = [0,1,2]
len_first = len(first_list)
second_list = [-1,-2,-3]
len_second = len(second_list)
for a in range(len_first):
print numpy.array(test)[[first_list[a] , second_list[a]]]
print test1[[first_list[a], second_list[a]]]
但是如果你有超过6个元素,这个原型就不能扩展。所以,我想知道是否有方法可以动态获取这对元素。
谢谢!
发布于 2013-01-31 01:14:07
这样如何:
In [10]: arr = numpy.array([1,23,4,6,7,8])
In [11]: [(arr[i], arr[-i-1]) for i in range(len(arr) // 2)]
Out[11]: [(1, 8), (23, 7), (4, 6)]
根据arr
的大小,用NumPy编写整个代码可能会更有效率:
In [41]: arr = numpy.array([1,23,4,6,7,8]*100)
In [42]: %timeit [(arr[i], arr[-i-1]) for i in range(len(arr) // 2)]
10000 loops, best of 3: 167 us per loop
In [43]: %timeit numpy.vstack((arr, arr[::-1]))[:,:len(arr)//2]
100000 loops, best of 3: 16.4 us per loop
发布于 2014-01-17 01:46:16
我在这里结束了,因为我在谷歌上搜索了"python第一个也是数组的最后一个元素“,找到了除了这个之外的所有其他内容。下面是标题问题的答案:
a = [1,2,3]
a[0] # first element (returns 1)
a[-1] # last element (returns 3)
发布于 2013-01-31 01:22:55
使用Numpy的奇特索引:
>>> test
array([ 1, 23, 4, 6, 7, 8])
>>> test[::-1] # test, reversed
array([ 8, 7, 6, 4, 23, 1])
>>> numpy.vstack([test, test[::-1]]) # stack test and its reverse
array([[ 1, 23, 4, 6, 7, 8],
[ 8, 7, 6, 4, 23, 1]])
>>> # transpose, then take the first half;
>>> # +1 to cater to odd-length arrays
>>> numpy.vstack([test, test[::-1]]).T[:(len(test) + 1) // 2]
array([[ 1, 8],
[23, 7],
[ 4, 6]])
vstack
复制数组,但所有其他操作都是恒定时间指针技巧(包括反转),因此速度非常快。
https://stackoverflow.com/questions/14609720
复制相似问题