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

如何在Python中按条件将二维NumPy数组元素替换为字符串?

Numpy二维数组元素替换方案

问题描述

需要将Numpy二维数组中大于100的元素替换为字符串"True",小于等于100的替换为字符串"False",原代码执行失败,以下是原代码及期望输出:

原代码

import numpy as np
h1 =np.array([[10, 85, 103, 444, 150, 200, 35, 47],      
                 [532, 476, 0, 1011, 50, 674, 5, 999],
                 [985, 7, 99, 101, 1, 58, 300, 78],
                 [750, 649, 86, 8, 505, 41, 745, 187]])
for r in range (0,len(h1)):
    for c in range(0,len(h1[0])):
        valor = h1[r][c]
        if valor > 100:
            h1[r][c] = 'True'
        else:
            h1[r][c] = 'False'

期望输出

[['False', 'False', 'True', 'True', 'True', 'True', 'False', 'False'],
 ['True', 'True', 'False', 'True', 'False', 'True', 'False', 'True'],
 ['True', 'False', 'False', 'True', 'False', 'False', 'True', 'False'],
 ['True', 'True', 'False', 'False', 'True', 'False', 'True', 'True']]

错误原因

原Numpy数组默认是数值类型(如int64),Numpy数组要求元素类型统一,直接给数值类型数组赋值字符串会触发类型不兼容错误,导致代码执行失败。

解决方案

方案一:转换为Object类型数组后循环赋值

先将数组转换为支持混合类型的object类型,再执行循环替换:

import numpy as np
h1 = np.array([[10, 85, 103, 444, 150, 200, 35, 47],      
               [532, 476, 0, 1011, 50, 674, 5, 999],
               [985, 7, 99, 101, 1, 58, 300, 78],
               [750, 649, 86, 8, 505, 41, 745, 187]])
# 转换为object类型,允许存储字符串
h1 = h1.astype(object)
for r in range(len(h1)):
    for c in range(len(h1[0])):
        h1[r][c] = 'True' if h1[r][c] > 100 else 'False'
print(h1)

方案二:使用Numpy向量化操作(高效推荐)

利用np.where直接生成目标字符串数组,无需循环,更符合Numpy的使用习惯:

import numpy as np
h1 = np.array([[10, 85, 103, 444, 150, 200, 35, 47],      
               [532, 476, 0, 1011, 50, 674, 5, 999],
               [985, 7, 99, 101, 1, 58, 300, 78],
               [750, 649, 86, 8, 505, 41, 745, 187]])
# 向量化替换:满足条件的位置赋值'True',否则'False'
result = np.where(h1 > 100, 'True', 'False')
print(result)

两种方案输出结果均与期望一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:39:20