2014-10-20 51 views
0

我需要能够在我的数组中关于某个元素旋转我的numpy数组。如果我有数组x = [a b c d e f g]关于我的数组中的元素旋转numpy数组

我知道操作扭转这种局面:x_arr = [::-1] == [g f e d c b a]

但是,让我们说,我想围绕c我原来的数组,然后我想:[e d c b a 0 0]

我想倒车,然后某种形式的串联和减少,但一些帮助,将不胜感激。

回答

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']

我希望这是你在哪里寻找。

+0

如果x中的元素是浮动的,我需要围绕一个整数值进行转动,那么怎么办? – alvarezcl 2014-10-20 18:23:45

+0

对于位于数组中心右侧的主元素,这不起作用。我假设OP也想要这个功能。 – TheSchwa 2014-10-20 22:19:28

1

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

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

在第二种情况下,当主元素位于数组的中心之前时,我将从倒置数组中移除将位于枢轴数组之外的元素。然后我返回这个缩短的数组,右边填上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