对于有间隙的网格数据,是否有np.REFORMATE的替代方案?

2024-10-17 02:27:08 发布

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

我有一个数据集,它是网格化的数据,已经被展平为x、y和z数据的单列,但是我想把它放回网格中,对它进行二维傅立叶变换。不幸的是,在网格时代前后的数据中存在一些缺口

对于常规网格,使用np.reshape可以将这些数据放回网格中,但由于存在间隙,这将不起作用。有没有类似的功能可以让我重塑和添加NAN

示例数据集(尽管我的数据有80000多个条目)

x = np.array([0, 1, 2 , 3, -1, 0, 1, 2, -1, 0, 1, -3, -2,-1,0])
y = np.array([0,1,2, 3, 1, 2,3,4, 3,4, 5, 3, 4,5,6])

我想在表格中填写:

x = array([[ 0.,  1.,  2.,  3.],
   [-1.,  0.,  1.,  2.],
   [nan, -1.,  0.,  1.],
   [-3., -2., -1.,  0.]])

y = array([[ 0.,  1.,  2.,  3.],
       [ 1.,  2.,  3.,  4.],
       [nan,  3.,  4.,  5.],
       [ 3.,  4.,  5.,  6.]])

This data set plotted as a scatter graph


Tags: 数据功能网格示例npnanarray常规
1条回答
网友
1楼 · 发布于 2024-10-17 02:27:08

这是一个局部解决方案。目前,它假设网格左侧或右侧缺少数据(即它还不能处理顶部和底部)。它还假设数据跨列增加(否则,您只需要将>替换为<if/else语句体),并且跨行的更改小于从第一列到最后一列的更改(如果不是这样,那么您将面临更大的问题)。根据数据的生成方式,您可能还希望使用条件替换==,以测试正在比较的两个值是否相对接近/小于行末尾的值之间的差异

import numpy as np

x = np.array([0, 1, 2 , 3, -1, 0, 1, 2, -1, 0, 1, -3, -2,-1,0])

def vector_to_array(x, verbose=False):
    # Reformat into list of lists
    x_grid_list = [[x[0]]]
    for i in x[1:]:
        if i > x_grid_list[-1][-1]:
            x_grid_list[-1].append(i)
        else:
            x_grid_list.append([i])
    
    # Calculate width and height
    height = len(x_grid_list)
    width = max(len(i) for i in x_grid_list)

    # Fill in missing data
    for row_ind in range(1, len(x_grid_list[1:])):
        row = x_grid_list[row_ind]
        if len(row) < width:
            if row[0] == x_grid_list[row_ind - 1][0]:
                # Missing data is on the left hand side
                x_grid_list[row_ind] = [np.nan] + row
            else:
                # Missing data is on the right hand side
                x_grid_list[row_ind] = row + [np.nan]

    # Convert to np array, print if verbose, and return
    x_array = np.array(x_grid_list)
    if verbose:
        print(x)
        print(x_grid_list)
        print(x_array)
    return x_array

x = np.array([0, 1, 2 , 3, -1, 0, 1, 2, -1, 0, 1, -3, -2,-1,0])
vector_to_array(x, True)
print("*" * 50)
x = np.array([0, 1, 2 , 3, -1, 0, 1, 2, -2, -1, 0, -3, -2,-1,0])
vector_to_array(x, True)

输出:

[ 0  1  2  3 -1  0  1  2 -1  0  1 -3 -2 -1  0]
[[0, 1, 2, 3], [-1, 0, 1, 2], [nan, -1, 0, 1], [-3, -2, -1, 0]]
[[ 0.  1.  2.  3.]
 [-1.  0.  1.  2.]
 [nan -1.  0.  1.]
 [-3. -2. -1.  0.]]
**************************************************
[ 0  1  2  3 -1  0  1  2 -2 -1  0 -3 -2 -1  0]
[[0, 1, 2, 3], [-1, 0, 1, 2], [-2, -1, 0, nan], [-3, -2, -1, 0]]
[[ 0.  1.  2.  3.]
 [-1.  0.  1.  2.]
 [-2. -1.  0. nan]
 [-3. -2. -1.  0.]]

相关问题 更多 >