我有一个形状为 (100000, 1024, 9) 的数据集,它是来自 emcee 的 MCMC 链。我尝试将每个链细化 10 并保留每个链的最后 2000 个,即采用链 [:, ::10, :][:, 2000:, :]。这给了我一个形状数组 (100000, 0, 9)。我想将其展平为数组 (100000, 9) 但我尝试过的任何方法都不起作用,给出错误:
IndexError:索引 0 超出尺寸为 0 的轴 1 的范围
我尝试过使用基本索引切片和各种 numpy 函数(squeeze、take、take_along_axis、delete),但它们都会导致相同的错误。我尝试从 for 循环手动执行此操作,但出现同样的错误。看来这个零维度很顽固。
我可以通过创建一个数组来重新创建错误,
a = np.zeros((100000,0,9))
我似乎无法从中删除 0 维度。
如何解决这个问题?谢谢。
当您的 numpy 数组的维度有 0 个条目时,您的代码(逻辑上)出现了问题。像这样的 numpy 数组可以存在,但它本质上是一个空数组。你不能重塑它而忽略那个 0 维。
关于你的例子: 您的第二个维度仅包含 1024 个条目(在您的示例中)。为什么要保留每 10 个条目(这很好),然后只保留最后 2000 个条目?开始时该维度的条目数已不足 2000,细化后您已拥有 103 个条目。只需忽略最后 2000 个的选择即可。如果您可能有更多条目,只需检查您的 2nd 维度是否仍然有超过 2000 个条目。
thinned_chain = chain[:,::10,:]
if thinned_chain.shape[1] > 2000:
thinned_chain = thinned_chain[:,-2000:,:]