首页 > 解决方案 > 从特定索引开始更改数组

问题描述

我的列表看起来像这样:

A_List= [0,1,2,3,4,5,6,7,8] 
B_List=[0,10,20,30,40,50,60,70,80]
C_List=[0,100,200,300,400,500,600,700,800]
D_List = ... 

等等。

每个值都是 np.float64 类型。

这里的值是随机的,我只是想表明它们都是相同的长度。

我现在尝试编写一个循环,以这种方式从特定索引开始更改这些列表,包括索引 4 和索引 4 以上的所有数字都减去索引 4 中写入的值。

i=4
while i <= len(A_List):
    
    A_List[i] = A_List[i]+A_List[4]
    B_List[i] = B_List[i]+B_List[4]
    C_List[i] = C_List[i]+C_List[4]
    D_List[i] = D_List[i]+D_List[4]
    ...

    i=i+1

这是行不通的。错误:只能将 str(不是“numpy.float64”)连接到 str)。我不太明白,因为我认为我正在用另一个浮点值替换一个浮点值。我在这里先向您的帮助表示感谢。

标签: pythonnumpyloops

解决方案


为什么不简单地使用 numpy 而不是列表?

首先创建一个二维数组:

A_List= [0,1,2,3,4,5,6,7,8] 
B_List=[0,10,20,30,40,50,60,70,80]
C_List=[0,100,200,300,400,500,600,700,800]

a = np.c_[A_List, B_List, C_List]
array([[  0,   0,   0],
       [  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300],
       [  4,  40, 400],
       [  5,  50, 500],
       [  6,  60, 600],
       [  7,  70, 700],
       [  8,  80, 800]])

然后执行减法:

>>> a-a[4]
array([[  -4,  -40, -400],
       [  -3,  -30, -300],
       [  -2,  -20, -200],
       [  -1,  -10, -100],
       [   0,    0,    0],
       [   1,   10,  100],
       [   2,   20,  200],
       [   3,   30,  300],
       [   4,   40,  400]])

如果您只想对 ≥ 4 行应用变换:

mask = np.tile((np.arange(len(a))>=4), (a.shape[1], 1)).T
np.where(mask, a-a[4], a)

输出:

array([[  0,   0,   0],
       [  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300],
       [  0,   0,   0],
       [  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300],
       [  4,  40, 400]])

推荐阅读