我知道Tensor类支持切片,但是当我尝试在TensorMap实例上进行切片时,错误是不支持该操作。如何切片TensorMap?
答案 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