我想在C++中生成指數間隔的數字列表,其中點的數量和邊界是已知的(就像Matlab的linspace或logspace或Python的numpy.logspace)。我發現了幾種實現對數間隔的數字(見下文),但想不到將這些數據反轉爲指數間隔數字的方法,此外,邊界可能是負數。生成指數間隔的數字列表
這裏是我迄今爲止發現:
Is there something like numpy.logspace in C++?
EXPLIST: Stata module to generate an exponentially-spaced list of numbers(不知道這個語言實際上是什麼)
Generating a logarithmically spaced numbers
編輯:
我應該已經解決了這個問題樂搶着計算器前多思考,這就是我其實並(通過this question啓發):
鑑於兩個界限first
和last
,我想產生與first
開始n
-size陣列與last
其中每個數組的結束元素是一些x
的指數。
這種數學問題是一個簡單的串聯U(i)
與U(0) = first
開始,以與U(n) = last
結束U(i) = first * q^i
(對於i在{0,1,...,N})和q = pow(last/first, 1/(n - 1))
。
這裏的原始代碼:
#include <Eigen\Dense>
using namespace Eigen;
VectorXd expList(double first, double last, DenseIndex n)
{
VectorXd vector(n); // native C++ array or vector can be used of course
double m = (double) 1/(n - 1);
double quotient = pow(last/first, m);
vector(0) = first;
for (DenseIndex i = 1; i < n; i++) // DenseIndex is just a typedef ptrdiff_t from the Eigen library
vector(i) = vector(i - 1) * quotient;
return vector;
}
這適用於任何符號相同雙打first
和last
其中當然first < last
,但它可以爲負first
和積極last
工作太稍加調整。
實施例:
爲第一= 50和LAST = 300 000和100層的元件陣列
僅供參考:語言*是* [Stata](http://en.wikipedia.org/wiki/Stata) – 2015-03-19 12:19:01
@Nocle我的不好。 – 2015-03-19 15:10:08
你在策劃什麼?你有1個1-d向量。 – 2015-03-19 16:04:32