Python 提取选定列&;保存前numpy 3D矩阵中的行

Python 提取选定列&;保存前numpy 3D矩阵中的行,python,numpy,matrix,row,Python,Numpy,Matrix,Row,由于我对整个“python”还不熟悉,我面临以下问题: 我有一个数据文件.npy(77,77,20)。我想从这个文件中提取25行和25列,得到一个新的矩阵,形状像(25,25,20)。行和列不是前25行,也不是后25行。我创建了两个变量“col_idx”和“row_idx”,其中包含25行和列的数量,但我无法从数据中提取它们。有没有关于如何进行的建议 我想使用numpy.savetxt将这个(25,25,20)矩阵保存在csv中,以便它可以读取。我可能在stackoverflow的这一部分中发现

由于我对整个“python”还不熟悉,我面临以下问题:

  • 我有一个数据文件.npy(77,77,20)。我想从这个文件中提取25行和25列,得到一个新的矩阵,形状像(25,25,20)。行和列不是前25行,也不是后25行。我创建了两个变量“col_idx”和“row_idx”,其中包含25行和列的数量,但我无法从数据中提取它们。有没有关于如何进行的建议

  • 我想使用numpy.savetxt将这个(25,25,20)矩阵保存在csv中,以便它可以读取。我可能在stackoverflow的这一部分中发现了一些棘手的问题,但由于我刚刚开始使用python,我并不真正理解它

  • 我很乐意接受任何关于如何编写代码的建议。
    谢谢

    对于数字1,可以传递索引数组

    # generate data, and a list of row and column indices
    data = np.random.rand(77,77,20)
    col_idx = np.random.randint(0, 77, 25)
    row_idx = np.random.randint(0, 77, 25)
    
    # extract the subset
    subset = data[row_idx, col_idx[:, np.newaxis]]
    print(subset.shape)
    # (25, 25, 20)
    
    这里唯一棘手的事情是
    np.newaxis
    这件事。这是NumPy的一个例子,它是一组组合不同形状数组的规则。这里,shape
    (25,)
    索引数组与shape
    (25,1)
    索引数组相结合,形成
    (25,25)
    索引网格,该网格提取原始数组的
    (25,25,20)
    子集

    至于保存到CSV,我发现库提供的工具对这类事情最有用。对于三维数据,您可以通过三维面板转换为数据帧,并直接保存到CSV:

    import pandas as pd
    panel = pd.Panel(subset)
    frame = panel.to_frame()
    frame.to_csv('output.csv')
    

    这将生成一个CSV,行/列索引作为每行的第一个和第二个条目。如果您希望csv输出的格式不同,可以在保存之前使用标准的熊猫索引转换(堆栈、取消堆栈、重新索引等)。

    谢谢您的帮助!我不太明白“np.random.randint”部分?何时指定要提取的列的位置?我不想要文件中的随机列?您没有提供数据,所以我生成了随机数据&行/列索引,与您在问题中提到的类似。使用行/列索引列表。它返回错误:“TypeError:元组索引必须是整数,而不是元组”。听起来行/列索引是元组而不是数组。第一个do
    row\u idx=np.array(row\u idx);col\u idx=np.array(col\u idx)
    好的,这样它就可以工作了。非常感谢你的帮助!