如何在无循环下统计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
相关产品推荐
相关产品推荐

