我正在使用根檔案(陣列陣列)。當我將陣列加載到 python 中時,我得到了一個笨拙的陣列,因為這是一個不同大小的陣列陣列。我想通過用 NaN 填充空元素來學習如何將其轉換為相同大小的 numpy 陣列。如何將大小不一的笨拙陣列轉換為 numpy 陣列?
uj5u.com熱心網友回復:
您可以使用此代碼并相應地實作它:
a = [1,2,3,4,5]
b = [1,2,3]
c = max(len(a),len(b))
for i in range(len(a),c):
a.append(None)
for i in range(len(b),c):
b.append(None)
結果如下:
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, None, None]
uj5u.com熱心網友回復:
假設您有一個可變長度串列陣列a:
>>> import numpy as np
>>> import awkward as ak
>>> a = ak.Array([[0, 1, 2], [], [3, 4], [5], [6, 7, 8, 9]])
>>> a
<Array [[0, 1, 2], [], ... [5], [6, 7, 8, 9]] type='5 * var * int64'>
使所有串列具有相同大小的函式是ak.pad_none。但首先,我們需要一個尺寸來填充它。我們可以用ak.num得到每個串列的長度,然后取它的np.max。
>>> ak.num(a)
<Array [3, 0, 2, 1, 4] type='5 * int64'>
>>> desired_length = np.max(ak.num(a))
>>> desired_length
4
現在我們可以填充它并將其轉換為 NumPy 陣列(因為它現在具有矩形形狀)。
>>> ak.pad_none(a, desired_length)
<Array [[0, 1, 2, None], ... [6, 7, 8, 9]] type='5 * var * ?int64'>
>>> ak.to_numpy(ak.pad_none(a, desired_length))
masked_array(
data=[[0, 1, 2, --],
[--, --, --, --],
[3, 4, --, --],
[5, --, --, --],
[6, 7, 8, 9]],
mask=[[False, False, False, True],
[ True, True, True, True],
[False, False, True, True],
[False, True, True, True],
[False, False, False, False]],
fill_value=999999)
缺失值 ( None) 被轉換為 NumPy 掩碼陣列。如果你想要一個普通的 NumPy 陣列,你可以ak.fill_none給它們一個替換值。
>>> ak.to_numpy(ak.fill_none(ak.pad_none(a, desired_length), 999))
array([[ 0, 1, 2, 999],
[999, 999, 999, 999],
[ 3, 4, 999, 999],
[ 5, 999, 999, 999],
[ 6, 7, 8, 9]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/348487.html
上一篇:為什么不消除零()洗掉零條目?
下一篇:滲透測驗中的小tips
