gpt4 book ai didi

python - 保存前从 numpy 3D 矩阵中提取选定的列和行

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:45 26 4
gpt4 key购买 nike

由于我对整个“python”事物很陌生,所以我面临以下问题:

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

  2. 我想使用 numpy.savetxt 将此 (25,25,20) 矩阵保存在 csv 中,以便可以读取。我可能在 stackoverflow 上发现这部分有些棘手,但当我刚开始使用 python 时,我不太明白 it .

我很乐意接受有关如何编码的任何建议。谢谢!

最佳答案

对于数字 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 broadcasting 的一个例子,这是一组组合不同形状数组的规则。这里,形状 (25,) 索引数组与形状 (25, 1) 索引数组组合,得到 (25, 25) 索引网格,提取原始数组的 (25, 25, 20) 子集。

至于保存为CSV,我找到了pandas提供的工具。库对于此类事情最有用。对于3D数据,您可以通过3D面板转换为数据框,并直接保存为CSV:

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

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

关于python - 保存前从 numpy 3D 矩阵中提取选定的列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com