我想将Michael Freidgeim
乘以一个数字,直到列表中的所有数字都为y_list
,
然后只打印新列表(如果可能的话,没有Numpy)。
可能将>=1
与y_list
中的行和数字相乘作为列。然后在所有数字都大于1时停止。
例如:i_list=[range(1,20)]
到y_list= [1.0, 0.5669650111879195]
until y_list=[2.0, 1.12.. ]
答案 0 :(得分:1)
最简单的方法是将整个列表乘以最小项的倒数。这将使该术语1和其余部分成为它的一部分:
inverse_min = min(y_list) ** -1
for int in y_list:
print int * inverse_min
上的示例
答案 1 :(得分:1)
如果你确实需要将它乘以一个数字(让我们假设它为1.3
),直到所有元素都大于1,那么下面的方法就是:
y_list = [1.0, 0.1, 0.2, 0.01]
k = 1.3
while any(y<=1 for y in y_list):
y_list = [y*k for y in y_list]
>>> print(y_list)
[112.45540695195751, 11.245540695195746, 22.491081390391493, 1.1245540695195746]
答案 2 :(得分:0)
在这种情况下,我建议使用加法而不是乘法,因为处理器除了乘法之外还要快得多。
请参阅What's the relative speed of floating point add vs. floating point multiply
我们假设我们的样本数据为[-0.4, 1.0, 0.5669650111879195]
y_list= [-0.4, 1.0, 0.5669650111879195]
y_factor = 0
y_min = min(y_list)
if y_min < 1:
y_factor = 1.0000000000001 - y_min
y_list = [x+y_factor for x in y_list]
print (y_list)
输出:
[1.0000000000001, 2.4000000000001, 1.9669650111880195]
我们得到的数组元素至少大于或等于1.请参阅https://repl.it/EDog/0