簡體   English   中英

如何將一維numpy數組元素線轉換為新的一維numpy數組?

[英]How to convert 1D numpy arrays element-wire into new 1D numpy array?

我有n numpy 1D數組ì_0 = [i00, i01, i02, ...]i_1 = [i10, i11, i12, ...] ,...並想將值放入m新的1D數組中o_0 = [i00, i10, 120, ...]o_1 = [i01, i11, i21, ...] ,...,其中m是等長數組i_0i_1 ,...的元素計數。 我如何才能實現最佳性能(迭代o_0o_1 ,...數組時可能啟用Python惰性)?

考慮此示例輸入數據i_0 (向上), i_1

import numpy as np

i_0 = np.array([1.0, 2, 3])
i_1 = np.array([1.1, 2.1, 3.1])

應該轉換為m=3輸出o_0o_1o_2

o_0 = np.array([1.0, 1.1])
o_1 = np.array([2.0, 2.1])
o_2 = np.array([3.0, 3.1])

或成一個二維數組o

o = np.array([[1.0, 1.1], [2.0, 2.1], [3.0, 3.1]])

相當於

o = np.array([o_0, o_1, o_2])

首先是一個問題:為什么要明智? 您是否想對從輸入到輸出數組的每個過程進行處理? 如果是這樣,您要么只需要簡單地循環輸入數組,就可以使用python的yield (也許可以節省工作內存)。 另外,如果可能的話,您可以將步驟包含在一個函數中,以對操作進行矢量化處理,從而一次性(在元素上)一次在完整的numpy數組上執行。

編輯:

在這種情況下(您的特定示例),這實際上非常簡單,因為您可以將輸入數組連接到單個矩陣中,例如:

input = np.vstack([i_0, i_1])

現在簡單地轉置矩陣,以獲得結果:

result = input.T

要再次從向量中提取數組,您可以像這樣解壓縮它們:

o_1, o_2 = result    # 2 output arrays for input arrays, each of 2 elements

您可以使用python 列表推導或類似方法對實際上具有更多輸入/輸出向量的矩陣執行此操作。


這個答案是特定於您的情況的,但希望展示與在每個元素上進行迭代的C / C ++之類的語言相比, numpy數組如何在單個調用(或幾個調用)中執行操作。 在后台,這就是numpy為您所做的(實際上是在C中),因此您在python中獲得了類似於C的性能。 如果您熟悉低級語言,則在考慮使用numpy時可能需要更改方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM