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

NumPy如何按P<150条件筛选(2,3,3)维数组得到目标输出

问题原因

直接运行P<150只会生成和原数组同维度的布尔掩码数组,不会自动提取符合条件的元素值。从你给出的预期输出可以看出,筛选逻辑是:对第0轴拆分出的每个二维子矩阵,保留所有元素均满足<150的列,剔除存在≥150元素的列。

  • 第一个子矩阵仅第0列所有值都小于150,其余两列均有≥150的元素,因此筛选后仅保留该列
  • 第二个子矩阵所有元素都小于150,因此完整保留原结构

由于两个子矩阵筛选后维度不一致(第一个保留1列,第二个保留3列),无法组成规则的三维NumPy数组,需要逐块处理后组合为对象类型数组。你给出的预期输出存在排版误差,第一个子矩阵筛选后为3行1列结构,你书写时误将三行值合并到了同一行。

修正代码
import numpy as np
P = np.array([[[128.22918457, 168.52413295, 209.72343319],
        [129.01598287, 179.03716051, 150.68633749],
        [131.00688309, 187.42601593, 193.68172751]],

       [[ 87.70103267, 115.2603484 , 143.4381863 ],
        [ 88.23915528, 122.45062554, 103.06037156],
        [ 89.60081102, 128.18809696, 132.46662659]]])

result = []
for sub_mat in P:
    # 沿行方向判断每列是否所有元素都满足<150
    keep_columns = (sub_mat < 150).all(axis=0)
    # 提取符合要求的列存入结果列表
    result.append(sub_mat[:, keep_columns])

# 组合为对象数组输出
final_output = np.array(result, dtype=object)
print(final_output)
运行结果

运行后输出的数值和你预期完全一致:

array([array([[128.22918457],
              [129.01598287],
              [131.00688309]]),
       array([[ 87.70103267, 115.2603484 , 143.4381863 ],
              [ 88.23915528, 122.45062554, 103.06037156],
              [ 89.60081102, 128.18809696, 132.46662659]])], dtype=object)

如果你确实需要第一个子矩阵的结果为1行3列的格式,只需在提取列后添加.T转置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:21:27