Xtensor是一個C++的函式庫,它主打有和Python的Numpy有類似的API,可以方便使用Numpy習慣的開發者轉移到C++上。
要初始化一個陣列,在Xtensor中使用多維容器xt::xarray,它定義在xtensor/xarray.hpp。另外要讓它能直接輸出內容,另有方法定義在xtensor/xio.hpp。我們引入:
#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>
初始化方式很類似std::array,例如初始化一維陣列arr1,型態為double,用大括號直接列舉出元素:
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
完整的範例如下 example_array.cpp:
#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>
int main(int argc, char *argv[]) {
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
std::cout << arr1 << std::endl;
}
在終端機編譯執行:
g++ -std=c++14 ./example_array.cpp -o example_array
./example_array
會得到輸出:
{ 0.1, 0.2, 0.3}
如果想訪問索引值為0元素,語法為:
std::cout << arr1(0) << std::endl;
這樣則會得到輸出:
0.1
類似於Numpy Array,Xarray也有shape()方法,也就是取得多維陣列各軸的大小。例如剛剛的例子:
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
std::cout << arr1.shape(0) << std::endl;
會得到3。也可以寫成:
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
std::cout << arr1.shape()[0] << std::endl;
要走訪整個Xarray,這邊用索引值搭配迴圈示範:
#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>
int main(int argc, char *argv[]) {
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
for (std::size_t i = 0; i < arr1.shape(0); i++) {
std::cout << arr1(i) << std::endl;
}
}
或是使用迭代器的方式走訪:
#include <iostream>
#include <iterator>
#include <xtensor/xarray.hpp>
#include <xtensor/xio.hpp>
int main(int argc, char *argv[]) {
xt::xarray<double> arr1 = {0.1, 0.2, 0.3};
for (auto iter = arr1.begin(); iter != arr1.end(); iter++) {
std::cout << *iter << std::endl;
}
}
兩者都會得到:
0.1
0.2
0.3
本文允許重製、散布、傳輸以及修改,但不得為商業目的之使用
使用時必須註明出處自:楊明翰 , 台灣人工智慧與資料科學研究室 https://aistudio.tw