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

如何基于两个列表的笛卡尔积创建元素为元组的二维NumPy数组?

解决方案:从笛卡尔积生成二维NumPy数组并处理块操作

一、生成目标二维NumPy数组

先实现func函数,将笛卡尔积按lt1的元素分组,重塑为指定结构的二维NumPy数组:

import numpy as np
from itertools import product

def func(cartesian_product):
    prod_list = list(cartesian_product)
    # 基于lt1、lt2的长度重塑数组,每行对应一个lt1元素的所有元组对
    len_lt1 = len(lt1)
    len_lt2 = len(lt2)
    return np.array(prod_list).reshape(len_lt1, len_lt2)

# 初始化原代码中的参数
b1 = 25
b2 = 40
step = 2
lt1 = list(range(1, b1+1, step))  # 转成list方便获取长度
lt2 = list(range(1, b2+1, step))

# 生成目标二维数组
result_arr = func(product(lt1, lt2))

测试验证

用你给出的示例测试:

lt1_test = [2, 3]
lt2_test = [1, 4, 7]
test_arr = func(product(lt1_test, lt2_test))
print(test_arr)

输出结果完全符合要求:

[[(2, 1) (2, 4) (2, 7)]
 [(3, 1) (3, 4) (3, 7)]]

二、固定大小块的创建、取值与剔除

1. 创建固定大小块

使用NumPy的sliding_window_view(需NumPy 1.20及以上版本)生成滑动块,可按需调整块大小和步长:

from numpy.lib.stride_tricks import sliding_window_view

# 定义块的尺寸和滑动步长
block_height = 2
block_width = 2
step_height = 2
step_width = 2

# 生成所有块,形状为 (行数方向块数, 列数方向块数, block_height, block_width)
blocks = sliding_window_view(result_arr, window_shape=(block_height, block_width))

2. 从字典中获取块对应值

假设你的字典结构为{元组键: 列表值},用向量化函数批量获取每个块元素的对应值:

# 示例字典(替换为你的实际字典)
tuple_dict = {
    (1,1): [1,2],
    (1,3): [3,4],
    # ... 其他元组键值对
}

# 定义取值函数,无对应键时返回空列表
def get_tuple_value(t):
    return tuple_dict.get(t, [])

# 向量化函数,应用到所有块元素
get_value_vec = np.vectorize(get_tuple_value, otypes=[object])
block_values = get_value_vec(blocks)

3. 剔除不符合条件的块

根据需求设置剔除规则,比如剔除包含空列表的块:

valid_blocks = []
valid_block_values = []

# 遍历所有块,筛选符合条件的
for row_idx in range(blocks.shape[0]):
    for col_idx in range(blocks.shape[1]):
        current_block = blocks[row_idx, col_idx]
        current_values = block_values[row_idx, col_idx]
        # 示例规则:块内所有元组都能在字典中取到非空值
        if all(len(val) > 0 for row in current_values for val in row):
            valid_blocks.append(current_block)
            valid_block_values.append(current_values)

# 转为NumPy数组(可选操作)
valid_blocks_arr = np.array(valid_blocks)
valid_block_values_arr = np.array(valid_block_values)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:54:52