从几个csv文件创建二维矩阵

2024-05-28 18:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python3,我想从几个CSV文件加载数据。 每个CSV(一个度量)有3列(3个不同的物理量)。我想在3个独立的变量上加载每个数量。对于一个CSV文件,这非常简单,我使用了:

TIME,CH1,CH2 = loadtxt(file_path,usecols=(3,4,5),delimiter=',',skiprows=2,unpack=True)

而且效果很好。现在我想扩展这个过程,以便可以加载几个CSV文件。每个数组都是二维的,每列代表一个CSV文件。我将使用3个2D数组,而不是几个带有3个变量的CSV,这对于数据分析更为方便。你知道吗

我想我可以试试这个:

TIME = matrix(zeros((20480,len(file_path)))) # 20480 length of each column
CH1 = matrix(zeros((20480,len(file_path)))) # len(file_path) number of CSV files
CH2 = matrix(zeros((20480,len(file_path))))
for k in range(0,len(file_path)): # reading each CSV file
    TIME[:,k],CH1[:,k],CH2[:,k] = loadtxt(file_path[k],usecols=(3,4,5),delimiter=',',skiprows=2,unpack=True)

但它告诉我:

ValueError: could not broadcast input array from shape (20480) into shape (20480,1)

最后我希望变量看起来像这样:

TIME = matrix([[0., 0., 0.],
               [0., 0., 0.],
               [0., 0., 0.],
               ...,
               [0., 0., 0.],
               [0., 0., 0.],
               [0., 0., 0.]])

每一列都来自一个不同的CSV文件。

我认为这是一个非常常见的问题,但我不太明白数组在Python中是如何工作的。我从Matlab得到这个想法,非常简单,但我不知道为什么用时间[:][:]索引数组不起作用。你知道吗

你知道我怎么做吗? 谢谢。你知道吗


Tags: 文件csvpathlentimezeros数组matrix
1条回答
网友
1楼 · 发布于 2024-05-28 18:15:36

使用np.array,而不是np.matrix

我怎么强调都不为过。np.matrix仅因遗留原因而存在。有关差异的解释,请参见this answernp.matrix需要两个维度,而np.array在索引时允许一个维度。这似乎是你错误的根源。你知道吗

下面是一个展示你所看到的行为的小例子:

A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.matrix(A)

print(A[:, 0].shape)  # (2,)
print(B[:, 0].shape)  # (2, 1)

因此,将结果数组定义为np.array对象:

m = 20480
n = len(file_path)
shape = (m, n)

TIME = np.zeros(shape)
CH1 = np.zeros(shape)
CH2 = np.zeros(shape)

相关问题 更多 >

    热门问题