簡體   English   中英

不同維數的python zip numpy數組

[英]Python zip numpy arrays of different dimension

我想壓縮numpy數組,以便通過np.save保存它。 為了壓縮一維數組,我使用了

import numpy as np

a = np.ones(4) * 5.
b = np.ones(4) * 4.
data = np.array(zip(a, b))

正是我想要的。 現在我有更多數據,像

c = numpy.ones((2, 4))

data = np.array(zip(a, b, c))

不起作用。 我可以做

data = np.array(zip(a, b, c[0], c[1]))

而是c的“深度”發生了變化。 我的解決方案是

data = np.insert(c, 0, b, axis=0)
data = np.insert(data, 0, a, axis=0)
data = zip(*data)

但這有點次優。 感謝您的建議。

我會使用numpy.hstack / vstack:

a = np.ones(4) * 5
b = np.ones(4) * 4
c = np.ones((2, 4))
data = np.vstack([a,b,c]).T

編輯:實際上,我現在主要使用np.row_stack / column_stack,因為我發現它比hstack或vstack更自然:

    data = np.column_stack([a,b,c.T])

調用zip時,使用*運算符對c進行“解壓縮”:

data = np.array(zip(a, b, *c))
data.shape
=> (4, 4)

(您可以避免使用zipvstack使用直接的numpy方法(例如,使用vstack ,如@metaperture建議),這可以說是一種更好的方法。但是,此答案說明了正確地執行您最初嘗試做的事情的正確方法。

如果您的唯一目標是保存多個不同維度的數組,那么我建議您使用zip ,正如該問題的標題所暗示的那樣。 請改用np.saveznp.savez_compressed 這些功能旨在保存多個(任意尺寸)數組。

使用zip特別糟糕,因為它不會移植到Python3 ,在zip3zip返回一個迭代器,而不是一個元組列表。 在迭代器上調用np.array會創建一個僅包含np.array object元素的數組,這可能不是您想要的。 保存和加載后,我無法恢復壓縮的數據。

暫無
暫無

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

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