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

如何在无循环下统计1D与3D数组公共元素数量(适配MQL5)

在MQL5中无循环统计一维与三维数组的公共元素数量

要实现无循环统计一维数组arr1与三维数组arr2的公共元素数量,可借助MQL5的NumPy类库提供的向量化操作完成,核心思路是将三维数组扁平化后求交集,再统计交集长度。

实现代码

#include <Math/NumPy/NumPy.mqh>

void OnStart()
{
    // 初始化目标一维数组
    int arr1[] = {1,2,3};
    // 构造三维数组arr2(示例为2行3列的三维结构,任意[y][x]层均为[1,2,3,4,5,6])
    int arr2[2][3][6];
    for(int y=0; y<ArraySize(arr2); y++)
        for(int x=0; x<ArraySize(arr2[y]); x++)
        {
            arr2[y][x][0] = 1;
            arr2[y][x][1] = 2;
            arr2[y][x][2] = 3;
            arr2[y][x][3] = 4;
            arr2[y][x][4] = 5;
            arr2[y][x][5] = 6;
        }
    
    // 三维数组扁平化转为一维数组(无循环操作)
    int flat_arr2[];
    numpy_flatten(arr2, flat_arr2);
    
    // 计算两个数组的交集(无循环操作)
    int intersection[];
    numpy_intersect1d(arr1, flat_arr2, intersection);
    
    // 输出公共元素数量(预期值为3)
    Print("公共元素数量:", ArraySize(intersection));
}

关键说明

  • 无循环核心:利用NumPy的numpy_flatten(扁平化多维数组)和numpy_intersect1d(求数组交集)函数,二者内部通过优化的向量化逻辑实现,无需手动编写遍历循环。
  • 数组适配:三维数组arr2的任意[y][x]子数组包含目标元素集合,扁平化操作会将所有层级的元素整合为一维数组,确保交集计算覆盖全部元素。
  • 结果验证:arr1的所有元素均存在于arr2的子数组中,因此交集长度为3,完全符合预期输出。

内容的提问来源于stack exchange,提问作者Razor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:57:09