2016-06-19 116 views
1

我想將一個數組轉換爲另一個數組數組。我不知道如何做到這一點,這裏是陣列:將數組轉換爲另一個數組的結構後的數組陣列

orig_array = [[0,1],[4],[3],[],[3,2,6],[]] 
my_array = [2,0,1,3,3,4,5] 

wanted_array = [[2,0],[1],[3],[],[3,4,5],[]] 

我想保留空數組。

感謝

+0

'numpy'標籤有什麼意義?它看起來像你有名單;列表清單,但仍列出。即使'orig_array'是一個numpy數組,它也是對象類型,基本上是一個列表。 – hpaulj

+0

@ user2520932如果以下答案之一對您有幫助,請考慮將其標記爲已接受。這會給回答者以信譽(讓回答值得他們的時間),同時表明你的問題已經得到解答。當我們處於這種狀態時:您還應該考慮您認爲有用的問題和答案。 –

回答

3

獲取每個元素的長度在orig_array,沿長度值執行cumumlative求和給我們my_array需要被拆分的最後使用np.split實際執行分裂在其中指數。因此,實施將是這個樣子 -

lens = [len(item) for item in orig_array] 
out = np.split(my_array,np.cumsum(lens))[:-1] 

採樣運行 -

In [72]: orig_array = np.array([[0,1],[4],[3],[],[3,2,6],[]]) 
    ...: my_array = np.array([2,0,1,3,3,4,5]) 
    ...: 

In [73]: lens = [len(item) for item in orig_array] 
    ...: out = np.split(my_array,np.cumsum(lens))[:-1] 
    ...: 

In [74]: out 
Out[74]: 
[array([2, 0]), 
array([1]), 
array([3]), 
array([], dtype=int64), 
array([3, 4, 5]), 
array([], dtype=int64)] 
+0

只有當my_array按排序順序時,這才起作用 –

+0

@MartinHallén'my_array'僅用於從中提取元素。所以,不應該依賴,如果它的排序或不。 – Divakar

+0

對不起,編輯的問題來更精確地體現實際my_array – user2520932

1

你可以做到以下幾點:

import copy 

def reflect_array(orig_array, order): 
    wanted_array = copy.deepcopy(orig_array) 
    for i, part_list in enumerate(orig_array): 
     for j, _ in enumerate(part_list): 
      wanted_array[i][j] = order.pop() 
    return wanted_array 

試運行:

orig_array = [[0,1],[4],[3],[],[3,2,6],[]] 
my_array = [2,0,1,3,3,4,5] 

print reflect_array(orig_array, my_array) 
# [[2, 0], [1], [3], [], [3, 4, 5], []] 
2
def do(format, values): 
    if type(format) == list: 
     return [do(v, values) for v in format] 
    else: 
     return values.pop(0) 

print do(orig_array, my_array) 

注意:這會破壞值來自的數組。

1
In [858]: my_array = [2,0,1,3,3,4,5] 

In [859]: [[my_array.pop(0) for _ in range(len(x))] for x in orig_array] 
Out[859]: [[2, 0], [1], [3], [], [3, 4, 5], []] 

使用b=my_array[:]如果你不想改變my_array

此操作與@karoly's答案相同;更直接,因爲它只假定一層嵌套。