首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NumPy数组中的第一个和最后一个元素

NumPy数组中的第一个和最后一个元素
EN

Stack Overflow用户
提问于 2013-01-31 01:10:18
回答 8查看 274.4K关注 0票数 46

我试图动态地从数组中获取第一个和最后一个元素。

因此,让我们假设数组有6个元素。

代码语言:javascript
复制
test = [1,23,4,6,7,8]

如果我尝试获取first and last = 1,823,74,6。有没有办法让元素按这个顺序排列?我看了几个Link Link2的问题。我在这些链接的帮助下想出了这个原型。

代码语言:javascript
复制
#!/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个元素,这个原型就不能扩展。所以,我想知道是否有方法可以动态获取这对元素。

谢谢!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-01-31 01:14:07

这样如何:

代码语言:javascript
复制
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编写整个代码可能会更有效率:

代码语言:javascript
复制
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
票数 26
EN

Stack Overflow用户

发布于 2014-01-17 01:46:16

我在这里结束了,因为我在谷歌上搜索了"python第一个也是数组的最后一个元素“,找到了除了这个之外的所有其他内容。下面是标题问题的答案:

代码语言:javascript
复制
a = [1,2,3]
a[0] # first element (returns 1)
a[-1] # last element (returns 3)
票数 149
EN

Stack Overflow用户

发布于 2013-01-31 01:22:55

使用Numpy的奇特索引:

代码语言:javascript
复制
>>> 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复制数组,但所有其他操作都是恒定时间指针技巧(包括反转),因此速度非常快。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14609720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档