如何使用循环取numpy数组a、b对应位置最大值填充全零数组c
实现方案说明
原有代码问题整理
- 全零数组定义错误:你写的
np.arrange是拼写错误(正确为np.arange),且np.arange(0,0,50)会生成空数组,无法存储50个元素,生成50个元素的全零整数数组正确写法为c = np.zeros(50, dtype=int) - while循环语法缺失:Python的循环判断语句末尾必须加英文冒号
: - 循环变量未初始化:你没有给循环计数变量
n设置初始值0,循环无法正常启动 - 索引越界风险:长度为50的数组合法索引范围是0~49,你写的判断条件
0<=n<=50会尝试访问不存在的索引c[50],触发索引越界报错 - 取值逻辑错误:
max[a,b]写法错误,函数调用需要用小括号传参,且你需要取两个数组对应索引位置的单个元素比较,而非直接传入整个数组比较
正确实现方式
方式1:按要求用while循环实现
import numpy as np # 初始化三个数组 a = np.random.randint(10, size=50) b = np.random.randint(10, size=50) c = np.zeros(50, dtype=int) n = 0 # 初始化循环计数变量 while n < 50: # 合法索引最大为49,判断n小于50即可 c[n] = max(a[n], b[n]) # 取当前索引下a和b的最大值赋值给c对应位置 n += 1 # 计数变量自增,进入下一轮循环
方式2:更高效的NumPy原生实现(无需手动写循环)
NumPy内置的向量化运算np.maximum可以直接对两个数组的对应位置元素取最大值,代码更简洁运行效率也更高:
import numpy as np a = np.random.randint(10, size=50) b = np.random.randint(10, size=50) c = np.maximum(a, b) # 直接生成符合要求的数组c
内容的提问来源于stack exchange,提问作者Mackenzie Watts
相关产品推荐
相关产品推荐

