如何用Python循环按指定区间填充NumPy矩阵?
用for循环正确填充NumPy矩阵切片的方法
你当前的代码问题在于每次循环的起始索引计算错误(0*i会始终从第0列开始赋值,导致后续迭代覆盖前面的内容),要实现依次填充0:2、2:4、4:6、6:8这些切片,核心是生成0、2、4、6这样的起始索引序列,下面提供几种可行方案:
方案1:直接生成起始索引序列
单独构造起始索引的序列,再和i、j的序列打包循环:
import numpy as np matrix = np.zeros((1,8)) # 生成0、2、4、6的起始索引 start_indices = range(0, 8, 2) for i, j, start in zip(range(2,6), range(1,5), start_indices): matrix[0, start:start+2] = [i*2, j*2] print(matrix)
方案2:利用循环计数推导起始索引
通过enumerate获取循环的次数,用次数计算起始索引(每次步进2):
import numpy as np matrix = np.zeros((1,8)) for idx, (i, j) in enumerate(zip(range(2,6), range(1,5))): start = idx * 2 matrix[0, start:start+2] = [i*2, j*2] print(matrix)
方案3:用NumPy向量化操作替代循环(更高效)
如果不需要强制使用for循环,NumPy的向量化操作能更简洁高效地实现目标:
import numpy as np i_arr = np.arange(2, 6) j_arr = np.arange(1, 5) # 将i*2和j*2交替排列后转为1行8列的矩阵 matrix = np.column_stack((i_arr*2, j_arr*2)).flatten()[np.newaxis, :] print(matrix)
以上三种方案都能得到你预期的输出:
[[4. 2. 6. 4. 8. 6. 10. 8.]]
内容的提问来源于stack exchange,提问作者user20050294
相关产品推荐
相关产品推荐

