You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xtensor调用tile函数触发std::bad_array_new_length错误的问题求助

xtensor调用tile函数触发std::bad_array_new_length错误的问题求助

我在尝试用xtensor实现NumPy中np.tile(a[:,0], (len(b), 1))的功能时遇到了问题:当b的第一维度长度M>1时,程序会抛出std::bad_array_new_length异常。我已经反复确认了a和b的形状是正确的,但始终找不到问题根源。

我的实现代码如下:

xt::xarray<float> res = xt::tile(
    xt::reshape_view(
        xt::view(a, xt::all(), 0), 
        {1, static_cast<int>(a.shape(0))}
    ), 
    {static_cast<int>(b.shape(0)),1}
);

其中a是形状为(N,21)的xt::xarray<float>,b是形状为(M,21)的xt::xarray<float>。

为了复现问题,我写了一个简化的测试文件:

#include <xtensor/xarray.hpp>
#include <xtensor/xpad.hpp>
#include <xtensor/xio.hpp>
#include <xtensor/xrandom.hpp>
#include <xtensor/xview.hpp>

int main(){
    xt::xarray<float> a = xt::random::rand<float>({2,21});
    xt::xarray<float> b = xt::random::rand<float>({2,21});
    xt::xarray<float> res = xt::tile(
        xt::reshape_view(
            xt::view(a, xt::all(), 0), 
            {1, static_cast<int>(a.shape(0))}
        ), 
        {static_cast<int>(b.shape(0)),1}
    );
    std::cout << res << std::endl;
    return 0;
}

问题分析与解决方案

std::bad_array_new_length通常是因为数组维度计算异常,或者尝试分配的内存超出系统允许范围导致的。结合你的代码,这里提供几个可能的解决方向:

  1. 先将视图转为实际数组再操作
    你当前直接对xt::view返回的视图对象做reshape_view和tile,视图的延迟计算特性可能导致维度计算出错。可以先把视图转换为实际数组,再执行后续步骤:
// 提取第一列并转为实际数组
xt::xarray<float> a_col = xt::view(a, xt::all(), 0);
// 重塑为(1, N)的二维行向量
auto a_col_2d = xt::reshape_view(a_col, {1, static_cast<int>(a_col.size())});
// 执行tile操作
xt::xarray<float> res = xt::tile(a_col_2d, {static_cast<int>(b.shape(0)), 1});
  1. 改用broadcast_to实现需求
    你的需求本质是把一维的a[:,0]在第一个维度重复M次,生成(M, N)的二维数组,这种场景下xt::broadcast_to比tile更高效,也能避开视图相关的坑:
// 将一维列向量扩展为(1, N)的二维行向量
auto a_col_expanded = xt::expand_dims(xt::view(a, xt::all(), 0), 0);
// 广播到目标形状(M, N)
xt::xarray<float> res = xt::broadcast_to(a_col_expanded, {static_cast<int>(b.shape(0)), static_cast<int>(a.shape(0))});
  1. 检查xtensor版本
    如果上述方法都无效,可能是你使用的xtensor版本存在兼容性bug,建议升级到最新稳定版本后再测试代码。

备注:内容来源于stack exchange,提问作者las

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:43:01