Python for循环迭代存值如何得到目标三维NumPy数组
问题原因
你当前代码中ar被初始化为Python原生列表,每次for循环生成的二维NumPy数组会作为独立元素追加到这个列表中,最终输出的是包含两个二维数组的列表,和你需要的三维NumPy数组结构不匹配。
另外你代码里的from array import *属于冗余导入,全程没有用到标准库array模块的功能,可以直接删除。
调整方案
方案1:保留原有循环逻辑,追加完成后转换数组类型
只需要在所有元素追加完成后,调用np.array()将存储了所有二维结果的列表转换为三维NumPy数组即可,修改后完整代码如下:
import numpy as np ar = [] A = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) for x in range(0, 2): B = A[x] + 1 ar.append(B) # 将列表转换为三维NumPy数组 ar = np.array(ar) print(ar)
运行后输出结果和你预期完全一致。
方案2:使用NumPy广播机制省略循环
NumPy原生支持对整个数组做逐元素运算,不需要手动写循环切片、追加元素,直接对原数组做+1操作就能直接得到同维度的结果数组,代码更简洁运行效率更高:
import numpy as np A = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) ar = A + 1 print(ar)
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

