Python 使用行然后使用下一个cloumn对二维数据进行切片的最简单方法

Python 使用行然后使用下一个cloumn对二维数据进行切片的最简单方法,python,pandas,numpy,Python,Pandas,Numpy,所以我有一个非常大的数据,看起来像这样: [[1, 4, 5, 7], [8,9,33,17,], [6,0,15,21,]] 我想把它转换成指定的相等行。从第一列的所有行开始,然后是第二列。。如果所需的chunkcs数为6,则看起来是这样的 [[1,8], [6,4], [9,0], [5,33], [15,7], [17,21]] 我已经编写了这段代码,它包含了所需的数据数组和chunkcs(行)的数量,我认为这段代码优化得很糟糕,因为它需要很长时间(我有大量数据): 目前还不清楚您的数

所以我有一个非常大的数据,看起来像这样:

[[1, 4, 5, 7],
[8,9,33,17,],
[6,0,15,21,]]
我想把它转换成指定的相等行。从第一列的所有行开始,然后是第二列。。如果所需的chunkcs数为6,则看起来是这样的

[[1,8],
[6,4],
[9,0],
[5,33],
[15,7],
[17,21]]
我已经编写了这段代码,它包含了所需的数据数组和chunkcs(行)的数量,我认为这段代码优化得很糟糕,因为它需要很长时间(我有大量数据):


目前还不清楚您的数组是否是真正的numpy数组,但我继续操作,就好像它是

a=np.array([[1, 4, 5, 7],
[8,9,33,17,],
[6,0,15,21,]])
我们转置以获得正确的数据顺序,然后展平,然后将展平的数组重塑为正确的形状

a.T.flatten().reshape(-1,2)

array([[ 1,  8],
       [ 6,  4],
       [ 9,  0],
       [ 5, 33],
       [15,  7],
       [17, 21]])

目前还不清楚您的数组是否是真正的numpy数组,但我继续操作,就好像它是

a=np.array([[1, 4, 5, 7],
[8,9,33,17,],
[6,0,15,21,]])
我们转置以获得正确的数据顺序,然后展平,然后将展平的数组重塑为正确的形状

a.T.flatten().reshape(-1,2)

array([[ 1,  8],
       [ 6,  4],
       [ 9,  0],
       [ 5, 33],
       [15,  7],
       [17, 21]])

如果NCHUNK*nSamples始终等于len(数据),则只需将转置数组重塑为所需形状即可。如果情况并非如此,则需要基于nChunks对阵列进行切片,并重塑切片后的阵列。大概

def ssliices(oldData, nChunck):
    # Assuming oldData is a numpy array
    a = oldData.T
    nsamples = a.size//nchunks
    # Only required if nChunck * nSamples != len(data) 
    a_sliced = a.ravel()[:(nsamples*nchunks)]

    return np.reshape(a_sliced, (nchunks, a_sliced.size//nchunks))

a = np.array([[1, 4, 5, 7],
[8,9,33,17,],
[6,0,15,21,]])

ssliices(a, 5)

array([[ 1,  8],
       [ 6,  4],
       [ 9,  0],
       [ 5, 33],
       [15,  7]])

如果NCHUNK*nSamples始终等于len(数据),则只需将转置数组重塑为所需形状即可。如果情况并非如此,则需要基于nChunks对阵列进行切片,并重塑切片后的阵列。大概

def ssliices(oldData, nChunck):
    # Assuming oldData is a numpy array
    a = oldData.T
    nsamples = a.size//nchunks
    # Only required if nChunck * nSamples != len(data) 
    a_sliced = a.ravel()[:(nsamples*nchunks)]

    return np.reshape(a_sliced, (nchunks, a_sliced.size//nchunks))

a = np.array([[1, 4, 5, 7],
[8,9,33,17,],
[6,0,15,21,]])

ssliices(a, 5)

array([[ 1,  8],
       [ 6,  4],
       [ 9,  0],
       [ 5, 33],
       [15,  7]])

Nchuck*nSamples是否总是等于len(数据)?在上面的例子中,如果nchunks=5会发生什么?nchunks*nSamples是否总是等于len(数据)?在上述示例中,如果nchunks=5会发生什么情况?