簡體   English   中英

是否有 Numpy 等價於 C++ std::vector reserve()、push_back() 和 shrink_to_fit()?

[英]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.

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