所以目标是我试图将一些数组保存为镶木地板。我可以使用 python 调试器来达到我的代码中可以保存的点。在我复杂的代码中,它们看起来像;
ipdb> ak.__version__
'1.2.2'
ipdb> array1
<Array [... 0., 1.]], [[50.], [4., 47.]]]] type='1 * 3 * var * var * float64'>
ipdb> array2
<Array [[False, True, True]] type='1 * 3 * bool'>
如果我尝试保存它们不起作用,我得到的错误是
ipdb> group = ak.zip({'a': array1, 'b': array2}, depth_limit=1)
ipdb> ak.to_parquet(group, 'test.parquet')
*** ValueError: could not broadcast input array from shape (3) into shape (1)
所以我开始在终端里乱来尝试重新创建问题并调试它,但我实际上无法复制它。这是发生的事情;
In [1]: import awkward as ak
In [2]: ak.__version__
'1.2.2'
In [3]: cat = ak.from_iter([[True, False, True]])
In [4]: dog = ak.from_iter([[[], [[50.0], [0.2, 0.1, 0., 0., 0.1]], [[50.0], [21., 0.1, 0.]]]])
In [5]: pets = ak.zip({'dog':dog, 'cat':cat}, depth_limit=1)
In [6]: ak.to_parquet(pets, "test.parquet")
In [7]: # no problems
In [8]: cat
<Array [[False, True, True]] type='1 * var * bool'>
请注意,尺寸已从 更改1 * 3 * bool
为1 * var * bool
。这似乎是唯一的区别 - 但我似乎无法弄清楚如何控制它?
设法隔离了这个问题,这不是我想的那样。当使用np.newaxis
在布尔数组中创建一个新轴,然后尝试保存它时,问题就出现了。
dog = ak.from_iter([1, 2, 3])[np.newaxis]
pets = {"dog": dog}
zipped = ak.zip(pets, depth_limit=1)
ak.to_parquet(zipped, "test.parquet")
# works fine
dog = ak.from_iter([True, False, True])[np.newaxis]
pets = {"dog": dog}
zipped = ak.zip(pets, depth_limit=1)
ak.to_parquet(zipped, "test.parquet")
# Gives
ValueError: could not broadcast input array from shape (3) into shape (1)
我真的应该知道最好不要在没有先隔离问题的情况下发布问题。为浪费您的时间而道歉。