【问题标题】:Change Array starting at spefic index从特定索引开始更改数组
【发布时间】:2021-09-30 07:51:30
【问题描述】:

我的列表如下所示:

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)。我不太明白,因为我认为我正在用另一个浮点值替换一个浮点值。提前感谢您的帮助。

【问题讨论】:

  • 什么是 A_Mean?
  • 对不起,我的错(平均值 = 列表)

标签: python numpy loops


【解决方案1】:

你为什么不简单地使用 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]])

【讨论】:

  • 非常感谢您的回答!如果我尝试得到: ufunc 'subtract' did not contain a loop with signature matching types (dtype(' dtype('
  • 请用一个失败的最小示例更新您的问题
  • 找到了来源,一个号码的格式不正确。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多