我想將一個數組轉換爲另一個數組數組。我不知道如何做到這一點,這裏是陣列:將數組轉換爲另一個數組的結構後的數組陣列
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],[]]
我想保留空數組。
感謝
我想將一個數組轉換爲另一個數組數組。我不知道如何做到這一點,這裏是陣列:將數組轉換爲另一個數組的結構後的數組陣列
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],[]]
我想保留空數組。
感謝
獲取每個元素的長度在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)]
只有當my_array按排序順序時,這才起作用 –
@MartinHallén'my_array'僅用於從中提取元素。所以,不應該依賴,如果它的排序或不。 – Divakar
對不起,編輯的問題來更精確地體現實際my_array – user2520932
你可以做到以下幾點:
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], []]
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)
注意:這會破壞值來自的數組。
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
答案相同;更直接,因爲它只假定一層嵌套。
'numpy'標籤有什麼意義?它看起來像你有名單;列表清單,但仍列出。即使'orig_array'是一個numpy數組,它也是對象類型,基本上是一個列表。 – hpaulj
@ user2520932如果以下答案之一對您有幫助,請考慮將其標記爲已接受。這會給回答者以信譽(讓回答值得他們的時間),同時表明你的問題已經得到解答。當我們處於這種狀態時:您還應該考慮您認爲有用的問題和答案。 –