Python np.如果元素不足,则使用填充来重塑()
是否可以重塑np.array()的形状,并在新形状不一致的情况下,用NaN填充空白 例: 目标,例如2x4矩阵:Python np.如果元素不足,则使用填充来重塑(),python,pandas,numpy,Python,Pandas,Numpy,是否可以重塑np.array()的形状,并在新形状不一致的情况下,用NaN填充空白 例: 目标,例如2x4矩阵: [1 2 3 4] [5 6 NaN NaN] 我需要这样做来绕过错误:ValueError:无法将大小为6的数组重塑为形状(2,4) 谢谢,我们将首先使用np.pad,然后重塑: m, n = 2, 4 np.pad(arr.astype(float), (0, m*n - arr.size), mode='constant', constant_value
[1 2 3 4]
[5 6 NaN NaN]
我需要这样做来绕过错误:ValueError:无法将大小为6的数组重塑为形状(2,4)
谢谢,我们将首先使用
np.pad
,然后重塑:
m, n = 2, 4
np.pad(arr.astype(float), (0, m*n - arr.size),
mode='constant', constant_values=np.nan).reshape(m,n)
array([[ 1., 2., 3., 4.],
[ 5., 6., nan, nan]])
这里的假设是
arr
是1D数组。在此代码之前添加一个断言,以在意外情况下失败。一个可能的解决方案:
将数组转换为浮点(nan
是浮点类型)
将数据调整为新形状
arr = np.resize(arr, (2,4))
print(arr)
array([[1., 2., 3., 4.],
[5., 6., 1., 2.]])
用np.NaN替换最后两个条目
arr[-1,-2:] = np.NaN
print(arr)
array([[ 1., 2., 3., 4.],
[ 5., 6., nan, nan]])
执行此操作的方法很多,但(几乎)都相当于创建所需形状和填充值的新数组:
In [50]: arr = np.array([1,2,3,4,5,6])
In [51]: res = np.full((2,4), np.nan)
In [52]: res
Out[52]:
array([[nan, nan, nan, nan],
[nan, nan, nan, nan]])
In [53]: res.flat[:len(arr)]=arr
In [54]: res
Out[54]:
array([[ 1., 2., 3., 4.],
[ 5., 6., nan, nan]])
为了便于复制,我使用了flat
将res
视为1d数组
一个例外是resize
方法,但它用0填充。并且不更改dtype
以允许浮动nan
:
In [55]: arr.resize(2,4)
In [56]: arr
Out[56]:
array([[1, 2, 3, 4],
[5, 6, 0, 0]])
In [50]: arr = np.array([1,2,3,4,5,6])
In [51]: res = np.full((2,4), np.nan)
In [52]: res
Out[52]:
array([[nan, nan, nan, nan],
[nan, nan, nan, nan]])
In [53]: res.flat[:len(arr)]=arr
In [54]: res
Out[54]:
array([[ 1., 2., 3., 4.],
[ 5., 6., nan, nan]])
In [55]: arr.resize(2,4)
In [56]: arr
Out[56]:
array([[1, 2, 3, 4],
[5, 6, 0, 0]])