[英]Is there a Numpy equivalent of C++ std::vector reserve(), push_back() and shrink_to_fit()?
我想將 append 個元素就地空 Numpy 數組。 我事先知道最大數組大小。 我找不到直接的方法來實現這一點,所以這是我的解決方法:
N = 1000
a = np.empty([N], dtype=np.int32)
j = 0
for i in range(N):
if f(i):
a[j] = g(i)
j += 1
a.resize(j)
是否有更優雅的編碼方式,無需跟蹤j
中的當前長度,類似於下面的 C++ 版本?
const int N = 1000;
vector<int> a;
a.reserve(N);
for (int i=0; i<N; i++)
if (f(i))
a.push_back(g(i));
a.shrink_to_fit();
是的,我在 Numpy 中閱讀了如何就地擴展數組? , 但它不包括這種特定情況,即事先已知的數組大小限制。
將np.fromiter(iter, dtype, count)
與生成器一起使用:
a = np.fromiter((g(i) for i in range(N) if f(i)), np.int32)
如果省略參數count
,數組大小會自動擴展,但仍然會損失一些性能。
但是,您不能通過將參數count
指定為最大長度來提高性能,因為如果迭代器不夠長,則會引發ValueError: iterator too short
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.