Python中如何将numpy数组行追加到另一数组且保留原有二维维度
问题根源
你现有代码存在两个核心错误:
- 每次命中条件时,你追加的是整个
X数组,而非当前符合要求的单条子数组X[i] np.append默认会将输入数组扁平化后拼接,未指定axis参数时不会保留二维结构;如果你的数组A初始是一维空数组,也会导致拼接后整体降维。
最优解决方案(推荐)
直接用numpy布尔索引一次性筛选符合条件的子数组,避免循环拼接,性能远高于逐行append:
# 生成筛选掩码 mask = X[:, split] <= n # 筛选得到符合条件的二维子数组 filtered_X = X[mask] # 如果A原本是空数组,直接赋值即可 A = filtered_X # 如果A原本就有存量内容,拼接时指定axis=0沿行维度拼接 # 注意提前确保A的初始化是二维结构,比如空A要初始化为 np.empty((0, X.shape[1]), dtype=X.dtype) # A = np.append(A, filtered_X, axis=0)
兼容循环的修改方案
如果你的业务逻辑必须保留循环(比如有额外复杂判断),修改原有代码如下:
# 首先初始化A为和X列数一致的二维空数组,不要初始化为一维的np.array([]) A = np.empty((0, X.shape[1]), dtype=X.dtype) for i in range(len(X)): if X[i, split] <= n: # 用X[i:i+1]取到shape为(1, 4)的二维子数组,指定axis=0沿行拼接 A = np.append(A, X[i:i+1], axis=0)
修改完成后调用A.shape即可得到类似(10, 4)的二维维度结果,完美保留子数组的独立结构。另外不建议使用已被numpy弃用的np.matrix类型,标准ndarray完全可以满足需求。
内容的提问来源于stack exchange,提问作者Nickell
相关产品推荐
相关产品推荐

