我有100个列表:
l0 = [35.467, 1785387, 9984670, 0.913]
l1 = [63.951, 2833687, 640679, 0.888]
l2 = [80.940, 3874437, 357114, 0.916]
l3 = [60.665, 2167744, 301336, 0.873]
l4 = [127.061, 4602367, 377930, 0.891]
l5 = [64.511, 2950039, 242495, 0.907]
l6 = [318.523, 17348075, 9525067, 0.915]我想创建一个100行4列的Numpy数组。我想知道是否有一种方法可以直接将列表的名称传递给Numpy数组函数?
我已经使用for循环创建了一个列表,然后存储:
names_of_variables_in_a_list = ['l0,', 'l1,', 'l2,', 'l3,', 'l4,', 'l5,', 'l6,'....,'l99','l100']
但当我试图通过它时,就像这样:
Employee_data = np.array(names_of_variables_in_a_list)。
它不工作,有没有人知道这是否可能?
发布于 2020-04-25 22:45:29
您可以这样做:
np.array([eval('l' + str(i)) for i in range(100)])或者如果你想使用你已经创建的list_of_names,
np.array([eval(name) for name in list_of_names])或者就像Vicrobot回答的那样
np.array(list(map(eval, list_of_names)))都是等价的。
eval('var')返回变量var,有other (safer) ways可以做到这一点,但在这里可能没什么问题。[... for i in range(100)]是一个list comprehension,它的作用类似于一个创建列表的for循环。
但我必须指出:像这样命名100个单独的变量是非常糟糕的做法,使用小写l命名变量也是非常糟糕的做法。
发布于 2020-04-25 22:45:02
您可以将列表列表传递给np.array:
lol = [[1,2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
np.array(lol)不过,看起来您的names_of_variables_in_a_list是一个字符串列表,而不是对列表变量的引用列表。您可以使用eval来获取实际的变量,而不是字符串表示:
names_of_variables_in_a_list = eval("l"+str(i)) for i in range(1, 100)]
np.array(names_of_variables_in_a_list)尽管eval确实不是一件通常建议/安全的事情。你最好重新考虑让这100个不同的变量。在字典中,每个键是名称,值是列表,这可能会让您更容易做到这一点。
发布于 2020-04-25 22:48:13
要嵌入list的名称,最自然的方法是使用dictionary:
l0 = [35.467, 1785387, 9984670, 0.913]
l1 = [63.951, 2833687, 640679, 0.888]
l2 = [80.940, 3874437, 357114, 0.916]
l3 = [60.665, 2167744, 301336, 0.873]
l4 = [127.061, 4602367, 377930, 0.891]
l5 = [64.511, 2950039, 242495, 0.907]
l6 = [318.523, 17348075, 9525067, 0.915]
d = {}
for i in range(7):
d['l{:d}'.format(i)] = eval('l{:d}'.format(i))那么结果是
In [2]: d
Out[2]:
{'l0': [35.467, 1785387, 9984670, 0.913],
'l1': [63.951, 2833687, 640679, 0.888],
'l2': [80.94, 3874437, 357114, 0.916],
'l3': [60.665, 2167744, 301336, 0.873],
'l4': [127.061, 4602367, 377930, 0.891],
'l5': [64.511, 2950039, 242495, 0.907],
'l6': [318.523, 17348075, 9525067, 0.915]}较短的字典理解:
d = {'l{:d}'.format(i): eval('l{:d}'.format(i)) for i in range(7)}使用f-string时更短(python >= 3.6):
d = {f'l{i}': eval(f'l{i}') for i in range(7)}如果您想创建numpy ndarray而不保留list的名称:
import numpy as np
array2d = np.array([eval('l{}'.format(i)) for i in range(7)])那么结果是
In [4]: array2d
Out[4]:
array([[3.5467000e+01, 1.7853870e+06, 9.9846700e+06, 9.1300000e-01],
[6.3951000e+01, 2.8336870e+06, 6.4067900e+05, 8.8800000e-01],
[8.0940000e+01, 3.8744370e+06, 3.5711400e+05, 9.1600000e-01],
[6.0665000e+01, 2.1677440e+06, 3.0133600e+05, 8.7300000e-01],
[1.2706100e+02, 4.6023670e+06, 3.7793000e+05, 8.9100000e-01],
[6.4511000e+01, 2.9500390e+06, 2.4249500e+05, 9.0700000e-01],
[3.1852300e+02, 1.7348075e+07, 9.5250670e+06, 9.1500000e-01]])其中array2d[i,:]是list i-th list。
使用f-string (python >= 3.6)的较短方法:
array2d = np.array([eval(f'l{i}') for i in range(7)])https://stackoverflow.com/questions/61427359
复制相似问题