[英]How do I convert a 2D numpy array into a 1D numpy array of 1D numpy arrays?
[英]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_0
, i_1
,...的元素計數。 我如何才能實現最佳性能(迭代o_0
, o_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_0
, o_1
和o_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.