[英]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)
(您可以避免使用zip
, vstack
使用直接的numpy方法(例如,使用vstack
,如@metaperture建議),這可以說是一種更好的方法。但是,此答案說明了正確地執行您最初嘗試做的事情的正確方法。
如果您的唯一目標是保存多個不同維度的數組,那么我不建議您使用zip
,正如該問題的標題所暗示的那樣。 請改用np.savez
或np.savez_compressed
。 這些功能旨在保存多個(任意尺寸)數組。
使用zip
特別糟糕,因為它不會移植到Python3 ,在zip3中zip
返回一個迭代器,而不是一個元組列表。 在迭代器上調用np.array
會創建一個僅包含np.array
object
元素的數組,這可能不是您想要的。 保存和加載后,我無法恢復壓縮的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.