如何切片TensorMap?

时间:2017-01-22 17:50:46

标签: eigen eigen3

我知道Tensor类支持切片,但是当我尝试在TensorMap实例上进行切片时,错误是不支持该操作。如何切片TensorMap?

2 个答案:

答案 0 :(得分:1)

mapped

此代码在27个元素(v)的std向量上创建一个3 x 3 x 3 TensorMap(extent),然后切片2 x 2 x 2块(startIdx )从左上角开始(sliced)并将其存储在#importeren van libraries import pandas as pd import matplotlib.pyplot as plt import numpy as np import glob #definieren van de lijsten i = 0 R1 = [] I1 = [] U1 = [] stdI = [] stdU = [] lijst = glob.glob('*.txt') lijst = sorted(lijst) #loop aanmaken for i in lijst: try: # data inlezen data = pd.read_csv(i, skiprows=5, delimiter='\t', names=['Time', 'Voltage', 'Current'], decimal=',') except: print('fout gegaan bij',i ) # kolommen definieren t = data['Time'] U = data['Voltage'] I = data['Current'] Ug = np.mean(U) stdUg = np.std(U) Ig = np.mean(I) stdIg = np.std(I) R = (Ug / Ig) R1.append(R) stdI.append(stdIg) stdU.append(stdUg) I1.append(Ig) U1.append(Ug) R1 = np.array(R1) stdI = np.array(stdI) stdU = np.array(stdU) Irel = (stdI/Ig) Urel = (stdU/Ug) stdR = R*(Irel+Urel)

答案 1 :(得分:0)

@kingusiu的answer几乎为我工作。它给出了编译错误(VC 2015,Eigen 3.3)。

要解决该错误,唯一需要做的就是使用auto关键字:

  
std::vector<int> v(27);
std::iota(v.begin(),v.end(),1);

Eigen::TensorMap<Eigen::Tensor<int,3>> mapped(v.data(), 3, 3, 3 );

Eigen::array<long,3> startIdx = {0,0,0};       //Start at top left corner
Eigen::array<long,3> extent = {2,2,2};       // take 2 x 2 x 2 elements 
auto sliced = mapped.slice(startIdx,extent);
  
std::cout << sliced << std::endl;
     

此代码在包含27个元素(mapped)的std向量上创建3 x 3 x 3 TensorMap(v),然后切片2 x 2 x 2块(extent )从左上角(startIdx)开始并将其存储在sliced