将数组列表合并为一个数组列表

时间:2019-09-26 09:01:07

标签: python arrays list numpy merge

在这个问题上,我花了比我愿意承认更多的时间。 我有一个函数:

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],[..],..]

2 个答案:

答案 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)])

应该工作。