首页 > 解决方案 > 如何将 a、b、c、d 分配给 python 列表中的不同行?

问题描述

我有一组值 a,b,c,d 我想创建一个 nx1 向量,根据 n 的大小将值分配给不同的行。如果 n=9 我希望向量是 [a+b, a, a+c, b, 0, c, b+c, d, c+d] 或者如果 n=4 我的向量是 [a+b, a+c、b+c、c+d]。对于row=1,条目是a+b,对于行sqrt(n),条目是a+c,介于(即1 和sqrt(n))之间的条目是a。对于 row=sqrt(n)+ 1,条目是 b,对于 2 sqrt(n),条目是 c,中间的条目是 a。对于 row=2 sqrt(n)+1 entry=b+c,对于 row=n,条目是 c+d,中间的条目是 d。n 的不同值是 n=4、9、25、100、225 和 400。有没有办法使用 for 循环构建这个向量,而不是手动创建 nx1 向量并使用 if 语句来分配相关的手动创建的向量?

标签: pythonpython-3.xlistnumpynumpy-ndarray

解决方案


我已经分开 n=4 因为它是一个特例

import numpy as np

n = 400
a,b,c,d = 1,2,4,8

result = np.empty((n,1))
sqrtn = n**0.5
if n == 4:
    result[:,0] = [a+b, a+c, b+c, c+d]
else:
    index1 = 0
    index2 = int(sqrtn)-1
    Index3 = int(sqrtn)
    index4 = int(2*sqrtn)-1
    index5 = int(2*sqrtn)
    index6 = int(n)-1
    result[Index3+1:index4] = 0
    result[index1+1:index2] = a
    result[index5+1:index6] = d
    result[index1] = a+b
    result[index2] = a+c
    result[Index3] = b
    result[index4] = c
    result[index5] = b+c
    result[index6] = c+d

推荐阅读