我需要能夠在我的數組中關於某個元素旋轉我的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]
我想倒車,然後某種形式的串聯和減少,但一些幫助,將不勝感激。
我需要能夠在我的數組中關於某個元素旋轉我的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]
我想倒車,然後某種形式的串聯和減少,但一些幫助,將不勝感激。
我沒有用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']
我希望這是你在哪裏尋找。
我寫了下面的腳本,其中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
如果x中的元素是浮動的,我需要圍繞一個整數值進行轉動,那麼怎麼辦? – alvarezcl 2014-10-20 18:23:45
對於位於數組中心右側的主元素,這不起作用。我假設OP也想要這個功能。 – TheSchwa 2014-10-20 22:19:28