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

如何遍历含子数组的N维numpy数组并生成单值张量集合

解决方案

核心思路

先定位原数组中所有包含子数组的位置,生成这些子数组取值的笛卡尔积,再逐个替换生成仅含单值的N维数组。

代码实现

import numpy as np
from itertools import product

def generate_single_value_arrays(original_arr):
    # 收集所有子数组的坐标和对应取值列表
    subarrays_info = []
    for coord, elem in np.ndenumerate(original_arr):
        if isinstance(elem, np.ndarray):
            subarrays_info.append((coord, elem.tolist()))
    
    if not subarrays_info:
        return [original_arr.copy()]
    
    # 生成所有取值组合的笛卡尔积
    values_lists = [vals for _, vals in subarrays_info]
    all_combinations = product(*values_lists)
    
    # 生成每个组合对应的目标数组
    result_arrays = []
    base_arr = np.zeros(original_arr.shape, dtype=np.float64)
    
    for combo in all_combinations:
        current_arr = base_arr.copy()
        for (coord, _), val in zip(subarrays_info, combo):
            current_arr[coord] = val
        result_arrays.append(current_arr)
    
    return result_arrays

使用示例

# 构造题目中的输入数组
arr = np.array([
    [np.array([1.  , 3.25, 5.5 , 7.75, 10.  ]), 0, 0],
    [0, np.array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 0],
    [0, 0, 0]
], dtype=object)

# 生成所有结果数组
result_list = generate_single_value_arrays(arr)

# 打印部分结果示例
print("第一个结果:")
print(result_list[0].astype(int))
print("\n第二个结果:")
print(result_list[1].astype(int))
print("\n最后一个结果:")
print(result_list[-1].astype(int))

关键说明

  • 兼容任意维度的输入数组,无需预先知晓维度或子数组数量。
  • 自动处理不同长度的子数组,生成所有可能的取值组合(数量为各子数组长度的乘积)。
  • 返回的每个数组都是独立的numpy对象,可直接传入其他函数使用。
  • 若原数组无任何子数组,将返回原数组的副本,避免修改原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:53:14