2017-07-16 64 views
2

我想複製一小陣特定長度的數組如何複製數組特定長度的數組

例子:

var = [22,33,44,55] # ==> len(var) = 4 
n = 13 

新的數組,我想應該是:

var_new = [22,33,44,55,22,33,44,55,22,33,44,55,22] 

這是我的代碼:

import numpy as np 
var = [22,33,44,55] 
di = np.arange(13) 
var_new = np.empty(13) 
var_new[di] = var 

我收到錯誤消息:

DeprecationWarning:賦值將在未來引發錯誤,很可能是因爲您的索引結果形狀與值數組形狀不匹配。您可以使用arr.flat[index] = values來保留舊的行爲。

,但我得到我的相應變量:

var_new 
array([ 22., 33., 44., 55., 22., 33., 44., 55., 22., 33., 44., 
    55., 22.]) 

那麼,如何解決這個錯誤?有其他選擇嗎?

回答

4

有更好的方法來複制陣列,例如,你可以簡單地使用np.resize

返回指定形狀的新數組。

如果新陣列大於原始陣列,則新陣列將填充a的重複副本。 [...]

>>> import numpy as np 
>>> var = [22,33,44,55] 
>>> n = 13 
>>> np.resize(var, n) 
array([22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22]) 
+1

這是不尋常的,實際上匹配'np.resize'的請求! – hpaulj

1

首先,如果var_new[di]的尺寸與var的尺寸不匹配,則不會收到錯誤消息,但會提示var_new[di] = var

二,錯誤消息告訴該怎麼做:用

var_new[di].flat = var 

,你沒有得到任何警告越來越它是保證工作。


如果不需要numpy另外,簡單的方法來做到這一點,只需使用itertools

>>> import itertools as it 
>>> var = [22, 33, 44, 55] 
>>> list(it.islice (it.cycle (var), 13)) 
[22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22] 
1

副本的陣列(稱爲名單在python)與[:]因爲他們是可變的。蟒蛇捷徑然後只是複製副本並添加一個 元素。

>>> var = [22, 33, 44, 55] 
>>> n = 3 
>>> newlist = var[:]*n + var[:1] 

給出了你想要的13個元素。

0
var = [22,33,44,55] 
n = 13 

重複的列表(或任何其它可迭代)而不numpy來完成,使用itertoolscycle()islice()功能

from itertools import cycle, islice 
var_new = list(islice(cycle(var),0,n) 
+0

這使得13個清單的列表 – hpaulj

+0

@hpaulj,你是對的,修復它 –