回答
請參考前面的答案爲您的問題的一般答案。
具體而言,爲了解決你提到的兩個例子,這裏是一些等效C++代碼使用矢量動態地生成你提到的陣列(沒有測試):
#include <vector>
using std::vector;
vector<double> generateRange(double a, double b, double c) {
vector<double> array;
while(a <= c) {
array.push_back(a);
a += b; // could recode to better handle rounding errors
}
return array;
}
vector<double> linspace(double a, double b, int n) {
vector<double> array;
double step = (b-a)/(n-1);
while(a <= b) {
array.push_back(a);
a += step; // could recode to better handle rounding errors
}
return array;
}
預分配使用'n'值填充'array',然後'push_back'附加'n'值到最後,所以您應該放棄預分配 – YuppieNetworking 2013-07-22 15:20:29
謝謝@YuppieNetworking。我混淆了語言,認爲分配的構造函數沒有填充。由於使用'push_back',我刪除了預分配。 – mattgately 2013-08-06 15:28:00
@mattgately,你可以使用'reserve'功能更有效。 – 2015-07-06 08:42:45
的OpenCV提供了一些功能類似於Matlab的,但其數量是非常有限的。
您可以
cv::Mat a = cv::Mat::eye(5);
cv::Mat b = cv::Mat::zeros(5);
cv::Mat img = cv::imread("myGorgeousPic.jpg");
cv::imwrite(img, "aCopyOfMyGorgeousPic.jpg");
它還支持diag()
但對於大多數像linspace
或magic
或無論是棘手的Matlab的功能,有在OpenCV中沒有記者,主要是因爲OpenCV的不是數學包,但計算機視覺之一。如果你需要一些特定的功能,你可以將它克隆到你的項目中(也可以自己寫)
不幸的是,C++沒有內置任何內置的功能來允許這種矩陣初始化。它支持多維數組,但您需要自己初始化每個元素。 C++是比Matlab更低級別的語言,它涉及更多的工作來編寫創建和初始化矩陣類型變量的功能。
話雖如此,有很多庫可用於C++,使數值計算比您自己嘗試編寫它更容易。如果你需要考慮使用庫,看看這個鏈接,建議幾個合適的https://scicomp.stackexchange.com/questions/351/recommendations-for-a-usable-fast-c-matrix-library
這是一個簡單的實現,如果你使用openCV。
Mat linspace(double &startP,double &Endp,int &interval)
{
double spacing = interval-1;
Mat y(spacing,1,CV_64FC1);
for (int i = 0; i < y.rows; ++i)
{
y.at<double>(i) = startP + i*(Endp - startP)/spacing;
}
return y;
}
double* linspace(int xi, int xf, unsigned int n){
double *vec ;
vec = new double[n];
float esp, falt=xf-xi;
esp=falt/(n-1);
vec[0]=xi;
for(int i=1; i<n; i++)
vec[i]=vec[i-1]+esp;
return vec;
你的回答應該包含你的代碼的解釋和描述它是如何解決問題的。 – AbcAeffchen 2014-12-11 00:49:28
這裏是我的測試linspace非常相似,所有的人,但處理所有的情況:
vector<double> Utilities::Linspace(double a, double b, int n) {
vector<double> array;
double epsilon = 0.0001;
double step = (b-a)/(n-1);
if (a==b)
{
for (int i = 0; i < n; i++)
{
array.push_back(a);
}
}
else if (step >= 0)
{
while(a <= b + epsilon)
{
array.push_back(a);
a += step;
}
}
else
{
while(a + epsilon >= b)
{
array.push_back(a);
a += step;
}
}
return array;
}
當n = 1時被零除的經典錯誤...我發佈了一些細微的更改(請參見下文) – champost 2016-01-04 20:34:38
@吉拉德的回答上述病例的擴展時n=0
和n=1
因爲後者給上升到除以零。
vector<double> linspace(double a, double b, int n) {
vector<double> array;
if ((n == 0) || (n == 1) || (a == b))
array.push_back(b);
else if (n > 1) {
double step = (b - a)/(n - 1);
int count = 0;
while(count < n) {
array.push_back(a + count*step);
++count;
}
}
return array;
}
當step是-ve時,您的代碼無法處理這種情況。 (b> a或b ankittie 2017-07-11 17:40:45
@ankittie是什麼讓你說,你有沒有嘗試過的代碼? 'step'是'double'類型,可以是+ ve或-ve。 – champost 2017-07-12 18:14:04
我想對mattgately提出的代碼稍加修改。我用它也有一些情況下,當step
計算不正確,由於分工逼近
double step = (b-a)/(n-1);
我只是增加了少量的while
條件:
while(a <= b+0.00001)
喜歡這個跟我的工作和正確的間隔數被創建。
- 1. C中的數組類型?
- 2. C#中數組索引的類型?
- 3. matlab中的C數組的想法
- 4. Matlab數據類型規範
- 5. 創建未知類型的數組。 C#
- 6. C++遍歷不同類型的數組
- 7. C#獲取多維數組的類型
- 8. C++不同類型的數組
- 9. 許多類型C的數組集合#
- 10. java中的數組類型
- 11. Matlab OOP對象類數組
- 12. Matlab分類樹組數據
- 13. C錯誤數組:數組類型具有不完整的元素類型。
- 14. C中的數據類型
- 15. C中的整數類型
- 16. C++依賴於模板類型的數組類型
- 17. C#:基本類型數組與類數組
- 18. C#數學類型的數學類型?
- 19. 非矩陣數據類型的C#&MATLAB互操作性
- 20. 類型數組
- 21. 在C#中有多個數據類型的多維數組?
- 22. C++ shared_ptr數組類型訪問
- 23. numpy數組類型轉換C
- 24. c#數組索引類型檢查
- 25. 數組C++字符串類型
- 26. C#表格/二維數組類型
- 27. 轉換數組類型在C#
- 28. 多種類型的C#數組(包括其他數組)
- 29. C++中等效數據類型的C#
- 30. 接受C/C++數組類型的函數
對於類似問題[這裏](https://stackoverflow.com/a/27030598/3079302)的好答案。 – iled 2017-08-22 05:16:54