Numpy不同矩阵元素字符串拼接报错及二次拼接需求求助
解决NumPy矩阵字符串拼接的索引错误及后续矩阵生成问题
一、修复索引错误问题
你遇到的IndexError是因为**np.matrix的索引逻辑和普通np.array完全不同**:当你写my_matrix[i][j]时,第一次my_matrix[i]会返回一个1行的矩阵(形状是(1,2)),第二次[j]是在这个1行的矩阵的轴0上取索引,而轴0只有1个元素(索引0),所以j=1时就会触发越界错误。
三种可行解决方案(推荐前两种,更高效):
方案1:改用普通np.array(官方推荐)
NumPy官方现在更建议使用array而非matrix(matrix是遗留类型),直接用array处理可以避免索引逻辑混乱:
import numpy as np dat = np.array([['data 1:1 ', 'data 2:2 '], ['data 1:1 ', 'data 2:2 '], ['data 1:1 ', 'data 2:2 ']], dtype='<U9') sp = np.array([['sim_spec_A0_grp25.pha', 'sim_spec_B0_grp25.pha'], ['sim_spec_A1_grp25.pha', 'sim_spec_B1_grp25.pha'], ['sim_spec_A2_grp25.pha', 'sim_spec_B2_grp25.pha']], dtype='<U21') # 高效向量化写法(完全不用循环) my_matrix = dat + sp
如果一定要用循环初始化,也可以这样写:
nset = 3 dim = 2 my_matrix = np.empty((nset, dim), dtype='U30') # 预分配足够长度的字符串数组 for i in range(nset): for j in range(dim): my_matrix[i,j] = dat[i,j] + sp[i,j]
方案2:保留np.matrix,修改索引方式
如果坚持要用matrix,把双括号索引my_matrix[i][j]改成逗号分隔的单括号索引my_matrix[i,j],这是矩阵正确的元素访问方式:
my_matrix = np.matrix(np.zeros((nset,dim)), dtype='str') for i in range(nset): for j in range(dim): my_matrix[i,j] = dat[i,j] + sp[i,j]
二、生成Final矩阵的需求
要把每行的两个字符串拼接成单个元素,同样可以用向量化操作快速实现:
方法1:用np.apply_along_axis
Final = np.apply_along_axis(lambda row: ' '.join(row), axis=1, arr=my_matrix).reshape(-1,1)
方法2:直接逐列拼接(更高效)
Final = (my_matrix[:,0] + ' ' + my_matrix[:,1]).reshape(-1,1)
两种方法都会得到你想要的形状为(3,1)的矩阵,每个元素是该行两个字符串的拼接结果。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

