修改n维矩阵的TypedArray位置

时间:2019-04-11 14:17:32

标签: c++ matlab operator-overloading mex

我想修改以前没有尺寸的矩阵的值:

ArrayFactory factory;
std::vector<size_t> position = {3, 14, 2, 23};
Array mat_data = factory.createArray<double>({30, 30, 30, 30});
Reference<TypedArray<double>> temp = mat_data[position[0]]; //fails here
for (int i = 1; i < positions.size(); ++i)
    mat_temp = mat_temp[positions[i]];
mat_temp[positions.back()] = getMyValue(position);

这给了我以下错误:

  

提供的索引不足

我知道我能够做到这一点:

mat_data[3][14][2][23] = getMyValue(position);

但是我无法对此进行硬编码,因为算法启动时我不知道position的大小。


实际解决方案删除了​​private,该ArrayElementRef(ArrayElementRef<is_const_ref>&& rhs) MW_NOEXCEPTArrayElementRef.hpp上隐藏了ArrayElementRef<false> getElementRef(ArrayElementRef<false> elem, std::vector<size_t>& position, size_t pos) { if (pos >= position.size() - 1) return std::move(elem); return getElementRef(elem[position[pos]], position, ++pos); }

ArrayFactory factory;
std::vector<size_t> position = {3, 14, 2, 23};
Array mat_data = factory.createArray<double>({30, 30, 30, 30});
ArrayElementRef<false> mat_temp = getElementRef(mat_data[position[0]], positions, 1);
mat_temp[position.back()] = getMyValue(position);

然后:

private

但是,删除此Testcontainers是不可取的...

0 个答案:

没有答案