如何避免np.where将数值0转换为字符串'0'?
解决方案:创建包含数值和字符串的object类型numpy数组
要让np.where直接生成包含数值0和字符串'hello'的object类型数组,避免自动类型转换,有两种更高效的方法:
方法1:预先初始化object类型数组后赋值
先创建一个与原数组形状一致的object类型空数组,再根据条件分别赋值:
import numpy as np A = np.array([[1,2,1],[2,1,2],[1,1,2]]) # 初始化同形状的object类型数组 result = np.empty(A.shape, dtype=object) # 按条件填充值 result[A == 1] = 0 result[A != 1] = 'hello'
输出结果:
array([[0, 'hello', 0], ['hello', 0, 'hello'], [0, 0, 'hello']], dtype=object)
方法2:强制让np.where的返回值为object类型
将数值0包装为object类型,让np.where推断出输出类型为object:
import numpy as np A = np.array([[1,2,1],[2,1,2],[1,1,2]]) x = np.where(A==1, np.array(0, dtype=object), 'hello')
此方法直接通过np.where生成目标数组,无需后续修改。
原理说明
np.where会自动根据两个分支的返回值类型统一输出类型:当传入原生int和str时,numpy会将数值转换为字符串以兼容;但如果其中一个分支是object类型的数值,numpy就会保留object类型,从而同时支持数值和字符串的存储。
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

