对于数字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索引转换(stack,unstack,reindex等)。
感谢您的帮助!我不太了解“np.random.randint”部分?何时指定我想要提取的列的位置?我不想要文件中的随机列? – Jrdnalvs
您没有提供您的数据,所以我生成了与您在问题中提到的类似的随机数据和行/列索引。使用您的行/列索引列表来代替。 – jakevdp
它返回错误:“TypeError:元组索引必须是整数,而不是元组” – Jrdnalvs