给numpy数组每行末尾追加零触发TypeError该如何解决
报错原因
np.concatenate 第一个入参要求是所有待拼接数组组成的序列(列表/元组),你直接将两个数组作为第1、第2个独立参数传入,第二个参数padding会被函数识别为指定拼接维度的axis参数,而axis仅支持传入整数,因此触发类型错误。
另外你当前的循环写法也存在两个问题:
- 循环中取出的
m1是原数组行的浅拷贝,直接修改m1不会改变原数组m的内容 - 没有存储每一行的处理结果,无法最终合并得到完整数组
修正方案
方案1:调整原有循环写法
import numpy as np v = 3 c = 3 l = 50 m = (np.random.rand(c, l) > 0.5) * 1 res = [] for m1 in m: padding = np.zeros(v, dtype=int) # 待拼接数组放在序列中传入 m1_padded = np.concatenate([m1, padding]) res.append(m1_padded) # 合并所有处理后的行得到最终数组 m = np.array(res)
方案2:更高效的向量化写法(无需循环,推荐)
直接对整个数组做拼接,一行即可完成操作,性能远高于循环写法:
import numpy as np v = 3 c = 3 l = 50 m = (np.random.rand(c, l) > 0.5) * 1 # 直接在水平方向拼接原数组和c行v列的全零数组 m = np.hstack([m, np.zeros((c, v), dtype=int)])
也可以用np.pad实现相同效果:
m = np.pad(m, pad_width=((0, 0), (0, v)), mode='constant', constant_values=0)
内容的提问来源于stack exchange,提问作者user6346482
相关产品推荐
相关产品推荐

