Python 提取选定列&;保存前numpy 3D矩阵中的行
由于我对整个“python”还不熟悉,我面临以下问题: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的这一部分中发现
谢谢 对于数字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)
好的,这样它就可以工作了。非常感谢你的帮助!