遍历数组

时间:2020-10-23 23:04:47

标签: python arrays for-loop

过去两个月来我一直在学习python,但仍然想弄清楚for循环是如何工作的!我想知道我在想什么甚至可能。

所以我有2个带有随机信息的数组

a = np.array([96.6, 93.71, 91.56, 90.24, 89.74, 90.04, 91.09, 92.82, 95.19, 98.14])

b = np.array([101.5, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1.75, 101.75, 0, 0, 0, 0, 0, 0, 0, 0],
 [2.0, 2.0, 102.0, 0, 0, 0, 0, 0, 0, 0],
 [2.25, 2.25, 2.25, 102.25, 0, 0, 0, 0, 0, 0],
 [2.5, 2.5, 2.5, 2.5, 102.5, 0, 0, 0, 0, 0],
 [2.75, 2.75, 2.75, 2.75, 2.75, 102.75, 0, 0, 0, 0],
 [3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 103.0, 0, 0, 0],
 [3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 103.25, 0, 0],
 [3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 103.5, 0],
 [3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 103.75])

我正在尝试执行一个满足这些要求的循环。例如:

value1 = 96.6/105.5
value2 = (93.71-1.75*value1)/101.75
value3 = (91.56-2*value1-2*value2)/102
...
value10 = (98.14-3.75*value1-3.75*value2-3.75*value3-3.75*value4-
    3.75*value5-3.75*value6-3.75*value7-3.75*value8-3.75*value9-3.75*. 
    value10)/103.75

有人可以帮我吗?我试图用这10个结果得到一个数组。

干杯!

2 个答案:

答案 0 :(得分:0)

创建一个新数组,然后将其与b数组的行进行点积。是的,请确保您使用零初始化最终结果数组。

In [115]: val_arr = np.zeros((10,1))
     ...: for i in range(len(a)):
     ...:     val_arr[i] = (a[i] - np.dot(b[i],val_arr))/max(b[i])
In [116]: val_arr
Out[116]: 
array([[0.95172414],
       [0.90461408],
       [0.86124827],
       [0.8227426 ],
       [0.78916271],
       [0.76042723],
       [0.73611886],
       [0.71559687],
       [0.69849544],
       [0.68423626]])

答案 1 :(得分:0)

肯定有一种更有效的方法,但是我使用了循环,因为您明确要求它。

假设

数组a与行中的b具有相同的长度。

输入

a = np.array([96.6, 93.71, 91.56, 90.24, 89.74, 90.04, 91.09, 92.82, 95.19, 98.14])

b = np.array([[101.5, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1.75, 101.75, 0, 0, 0, 0, 0, 0, 0, 0],
 [2.0, 2.0, 102.0, 0, 0, 0, 0, 0, 0, 0],
 [2.25, 2.25, 2.25, 102.25, 0, 0, 0, 0, 0, 0],
 [2.5, 2.5, 2.5, 2.5, 102.5, 0, 0, 0, 0, 0],
 [2.75, 2.75, 2.75, 2.75, 2.75, 102.75, 0, 0, 0, 0],
 [3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 103.0, 0, 0, 0],
 [3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 103.25, 0, 0],
 [3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 103.5, 0],
 [3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 3.75, 103.75]])

解决方案

result = [(v-np.sum([b[i][j]*a[j]/b[i][i] for j in range(i)]))/b[i][i] for i, v in enumerate(a)]
result = np.array(result) # convert the list into an array

输出

print(result)
[0.9517241379310344, 0.9046542991506136, 0.8610630526720492, 0.8218824612478405, 0.7869672813801308, 0.7560004972738738, 0.7283061551512867, 0.7029629065070441, 0.6793031342621765, 0.6564261866744086]