[英]How to convert vstack code to for-loop (Python)?
我目前有一個列表(list_arr),其中包含 8 個 numpy arrays 大小如下:
0. (6300, 6675, 3)
1. (5560, 6675, 3)
2. (5560, 6675, 3)
3. (5560, 6675, 3)
4. (6300, 6675, 3)
5. (5560, 6675, 3)
6. (5560, 6675, 3)
7. (5560, 6675, 3)
我想以 4 個批次(例如 0-3 和 4-7)堆疊 arrays,以便 output 陣列的大小為(22980、6675、3)。 這可以使用以下代碼手動完成:
out1 = np.vstack((list_arr[0], list_arr[1], list_arr[2], list_arr[3]))
out2 = np.vstack((list_arr[4], list_arr[5], list_arr[6], list_arr[7]))
但是,我打算將這段代碼升級為長度 = 116 的更長列表,而上述方法效率不高。 有沒有辦法在 for 循環中做到這一點?
您可以對數組列表進行切片並將所需的切片數組傳遞給您的 function
檢查以下示例代碼:
arr_list = [1,2,3,4,5,6,7,8,9,0,12,33,45,66,77,88,23,21]
start = 0
for i in range(0,len(arr_list),4):
if i == 0:
continue
print(arr_list[start:i])
start = i
if start < len(arr_list):
print(arr_list[start:])
output 是:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 0, 12, 33]
[45, 66, 77, 88]
[23, 21]
如果您的數組的長度是 4 的精確倍數,那么您可以忽略最后一個 if 條件。
解決這個問題的方法不止一種。
讓我向您展示 zip 的示例,讓您探索更多選項。 您也可以嘗試 map、range、np.arange 和其他實用程序。
可以使用的for循環:
for i in zip(*[iter(list_arr)]*4):
print(np.vstack(i))
另一種選擇 - 帶有 vsplit 的 for 循環:
for i in np.vsplit(list_arr, len(list_arr)//4):
print(i)
與您一起試運行示例
list_arr = np.array([(6300, 6675, 3),
(5560, 6675, 3),
(5560, 6675, 3),
(5560, 6675, 3),
(6300, 6675, 3),
(5560, 6675, 3),
(5560, 6675, 3),
(5560, 6675, 3)])
for i in zip(*[iter(list_arr)]*4):
print(np.vstack(i))
Output:
[[6300 6675 3]
[5560 6675 3]
[5560 6675 3]
[5560 6675 3]]
[[6300 6675 3]
[5560 6675 3]
[5560 6675 3]
[5560 6675 3]]
此代碼適用於具有任意數量項目的 arrays,但 output 的子列表將是 4 的倍數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.