过去两个月来我一直在学习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个结果得到一个数组。
干杯!
答案 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]