Python中如何将ndarray里的1替换为对应字母a、b等?
解决方法
假设你用的是NumPy数组,这里提供两种实用的处理方式:
方式一:保留原数组结构,将1替换为对应字母,0位置留空
import numpy as np # 定义原数组 arr = np.array([ [0, 0, 1], [1, 0, 1], [0, 1, 1], [0, 0, 0] ]) # 列对应的字母:索引0对应第一列(a),索引1对应第二列(b),索引2对应第三列(c) col_letters = np.array(['a', 'b', 'c']) # 创建结果数组,初始化为空字符串 result = np.full(arr.shape, '', dtype='U1') # 遍历每一列,替换对应位置的1为字母 for col_idx in range(arr.shape[1]): # 找到当前列中值为1的位置,替换为对应字母,其余保持空 result[:, col_idx] = np.where(arr[:, col_idx] == 1, col_letters[col_idx], result[:, col_idx]) print(result)
运行后输出:
[['' '' 'c'] ['a' '' 'c'] ['' 'b' 'c'] ['' '' '']]
方式二:每行合并所有对应字母,生成字符串数组
如果需要把每行中所有对应字母拼接成一个字符串(比如第二行的1在第一和第三列,就拼成ac),可以用以下代码:
import numpy as np arr = np.array([ [0, 0, 1], [1, 0, 1], [0, 1, 1], [0, 0, 0] ]) col_letters = np.array(['a', 'b', 'c']) # 按行处理,筛选出值为1的列对应的字母并拼接 row_results = np.apply_along_axis(lambda row: ''.join(col_letters[row == 1]), axis=1, arr=arr) print(row_results)
运行后输出:
['c' 'ac' 'bc' '']
内容的提问来源于stack exchange,提问作者Pedro Souza
相关产品推荐
相关产品推荐

