转动关于我的数组中的元素的numpy数组

时间:2014-10-20 04:58:58

标签: python sorting numpy

我需要能够将我的numpy数组转换为我的数组中的某个元素。

说我有数组x = [a b c d e f g]

我知道撤消它的操作:x_arr = [::-1] == [g f e d c b a]

但是,假设我想将原始数组转换为c,然后我想:[e d c b a 0 0]

我正在考虑扭转某种连接和缩减,但是会有一些帮助。

2 个答案:

答案 0 :(得分:1)

我编写了以下脚本,其中a是数组,p是pivot元素的索引,f用于在数据透视后填充数组。截断数组的索引是通过一些逻辑和反复试验找到的。请注意,对于偶数长度数组,中心索引c将为x.5,其中x为整数,而对于奇数长度数组,它将为x.0 。这允许if语句正确处理偶数和奇数长度数组。

在第一种情况下,当pivot元素是数组的中心时,我只返回数组的反向。请注意,偶数长度数组永远不会执行此if语句。

在第二种情况下,当pivot元素位于数组中心之前时,我将从反转数组中删除掉落在pivotped数组之外的元素。然后我将这个缩短的数组右侧填充f,长度为a

第三种情况(枢轴元素位于数组中心之后)和第二种情况之间的唯一区别是缩短的数组被填充而不是右边填充。

最后,如果由于某些无法预料的错误而没有执行任何if语句,我将返回None

#!/usr/bin/env python

import numpy as np

def pivot(a,p,f):
    la = len(a)
    c = la/2.0-0.5
    x = a[::-1]
    if p==c:
        return x
    if p<c:
        x = x[la-(2*p+1):]        
        lpad = la-len(x)
        pad = np.repeat(f,lpad)
        return np.append(x,pad)
    if p>c:
        x = x[:2*(la-p)-1]
        lpad = la-len(x)
        pad = np.repeat(f,lpad)
        return np.append(pad,x)
    return None

答案 1 :(得分:0)

我还没有使用numpy,所以我对此并不熟悉, 但你想要实现的是非常简单的

x = ['a','b','c','d','e','f','g']
pivot = 'c'

len_x = len(x)
pad_len = len_x - len(x[:x.index(pivot)*2 + 1])

y = x[:x.index(pivot)*2 + 1]
y = list(reversed(y))

for i in range(pad_len):
    y.append('0')

print y

输出为['e', 'd', 'c', 'b', 'a', '0', '0']

我希望这就是你在寻找的地方。