Python NumPy中如何确保数组P与M维度一致为(2,3,3)
问题原因
当前代码的循环逻辑里,每次通过P[x]取到的是数组P在第一维的切片,形状为(3,3),且每次计算后都会直接覆盖M的原有值,最终M只会保留最后一次循环得到的二维数组,自然和形状为(2,3,3)的P不匹配。
解决方法
有两种常用实现方案,优先选择第一种向量化写法,运行效率远高于循环逻辑:
- 方法1:直接利用numpy的广播机制做全局逐元素运算,不需要手写循环,一行代码就能得到和
P形状完全一致的结果 - 方法2:如果必须保留循环逻辑,先初始化一个和
P同形状的数组,循环时把每个切片的计算结果存入对应的维度位置即可
修正后代码
推荐无循环写法
import numpy as np P=np.array([[[128.22918457, 168.52413295, 209.72343319], [129.01598287, 179.03716051, 150.68633749], [131.00688309, 187.42601593, 193.68172751]], [[ 64.11459228, 84.26206648, 104.86171659], [ 64.50799144, 89.51858026, 75.34316875], [ 65.50344155, 93.71300796, 96.84086375]]]) # 直接对整个三维数组逐元素+1,结果形状和P完全一致 M = P + 1 print(M.shape) # 输出 (2, 3, 3) print(M)
保留循环的写法
import numpy as np P=np.array([[[128.22918457, 168.52413295, 209.72343319], [129.01598287, 179.03716051, 150.68633749], [131.00688309, 187.42601593, 193.68172751]], [[ 64.11459228, 84.26206648, 104.86171659], [ 64.50799144, 89.51858026, 75.34316875], [ 65.50344155, 93.71300796, 96.84086375]]]) # 先初始化和P同形状、同数据类型的空数组 M = np.empty_like(P) for x in range(2): M[x] = P[x] + 1 print(M.shape) # 输出 (2, 3, 3) print(M)
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

