在这个问题上,我花了比我愿意承认更多的时间。 我有一个函数:
def array_funct(filename):
...
data = np.array((array))
return data
从文件夹中读取.txt文件,并返回一个numpy数组。
第一个行是x坐标的列表,第二行是对应的y坐标。因此,我使用:
array_funct(filename)[:,0]
array_funct(filename)[:,1]
访问x和y坐标。
现在我要做的就是创建一个for循环,该循环将读取多个文件并按照以下方式存储它们
for i in range(0,number_of_files):
array_funct(file[i])[:,0]
array_funct(file[i])[:,1]
让我们看看我得到的x列表:
print(array_funct(file[0])[:,0])
[1,2,3,4]
print(array_funct(file[1])[:,0])
[2,4,6,8]
我想要做的就是获取这两个类似numpy的列表并创建:
x_tot = [[1,2,3,4], [2,4,6,8]]
这样我就可以像这样明智地访问单个列表元素:
x_tot[0] = [1,2,3,4]
好难吗?我应该停止使用numpy array吗?如果可能的话,我想呆在numpy中。
还请记住,我仅针对2个文件制作了此示例,但可能还会更多。我只想为要读取的可变数量的文件创建x_tot和y_tot。这样:
x_tot = [[1,2,3],[2,3,4],[..],..]
x_tot = [[2,4,6],[4,6,8],[..],..]
答案 0 :(得分:2)
给出以下array_funct
函数和filenames
列表:
def array_funct(filename):
# Fake random data, replace with data read from file
data_read = [[1,2,3,4], [5,6,7,8]] # [random.sample(range(1, 10), 7), random.sample(range(1, 10), 7)]
data = np.array(data_read)
return data
filenames = ['file1.txt', 'file2.txt']
尝试以下代码:
lx = [list(array_funct(file)[0]) for file in filenames]
ly = [list(array_funct(file)[1]) for file in filenames]
或者通过一次阅读和滚动文件来提高效率:
all_data = [(list(arr[0]),list(arr[1])) for arr in [array_funct(f) for f in filenames]]
lx, ly = list(map(list, zip(*all_data)))
在两种情况下,输出如下:
# lx = [[1, 2, 3, 4], [1, 2, 3, 4]]
# ly = [[5, 6, 7, 8], [5, 6, 7, 8]]
答案 1 :(得分:1)
类似:
x_tot = np.array([array_funct(file[i])[:,0] for i in range(0,number_of_files)])
应该工作。