您能帮我纠正下面给出的代码吗?
输入:
R
:评级矩阵,形状为m x n的浮点数矩阵。如果等级未知,则数字为“无”。
输出:
B
:二进制掩码矩阵,形状为m乘n的浮点numpy矩阵。
R[i, j]
,则B[i, j] = 1
R[i, j]
(无),则B[i, j] = 0
[代码]
def compute_B(R):
for (i, j), value in np.ndenumerate(R):
if R[i, j] == None:
R[i, j] = 0
else:
R[i, j] = 1
B = R
return B
答案 0 :(得分:0)
如果R
确实是一个浮点数组,则它可以包含nan
个元素,而不是None
。您不需要循环即可创建numpy数组的掩码:
B = ~np.isnan(R)
答案 1 :(得分:0)
[代码]
def compute_B(R):
B = R != None
B = B.astype(int)
return B
答案 2 :(得分:0)
In [160]: R = np.array( [ [ 4., 5., 3., None, 1.], [ None, 2., 3., 2., 3.], [ 5.
...: , None, 1., 2., None]])
In [161]: R
Out[161]:
array([[4.0, 5.0, 3.0, None, 1.0],
[None, 2.0, 3.0, 2.0, 3.0],
[5.0, None, 1.0, 2.0, None]], dtype=object)
这是一组python对象,有些是数字,有些是None
。
In [162]: list(np.ndenumerate(R))
Out[162]:
[((0, 0), 4.0),
((0, 1), 5.0),
((0, 2), 3.0),
((0, 3), None),
((0, 4), 1.0),
((1, 0), None),
((1, 1), 2.0),
((1, 2), 3.0),
((1, 3), 2.0),
...
((2, 4), None)]
In [163]: for (i,j),k in np.ndenumerate(R):
...: if k is None:
...: R[i,j] = 0
...: else:
...: R[i,j] = 1
...:
In [164]: R
Out[164]:
array([[1, 1, 1, 0, 1],
[0, 1, 1, 1, 1],
[1, 0, 1, 1, 0]], dtype=object)
is None
是预期None
时的正确测试。
另一种测试方法:
In [167]: np.frompyfunc(lambda k: k is None, 1,1)(R)
Out[167]:
array([[False, False, False, True, False],
[True, False, False, False, False],
[False, True, False, False, True]], dtype=object)
In [168]: np.where(np.frompyfunc(lambda k: k is None, 1,1)(R),0,1)
Out[168]:
array([[1, 1, 1, 0, 1],
[0, 1, 1, 1, 1],
[1, 0, 1, 1, 0]])
或在lambda中包含0/1分配:
In [169]: np.frompyfunc(lambda k: 0 if k is None else 1, 1,1)(R)
Out[169]:
array([[1, 1, 1, 0, 1],
[0, 1, 1, 1, 1],
[1, 0, 1, 1, 0]], dtype=object)
看起来像astype(float)
将None
转换为nan
:
In [177]: R.astype(float)
Out[177]:
array([[ 4., 5., 3., nan, 1.],
[nan, 2., 3., 2., 3.],
[ 5., nan, 1., 2., nan]])
In [178]: np.isnan(R.astype(float))
Out[178]:
array([[False, False, False, True, False],
[ True, False, False, False, False],
[False, True, False, False, True]])
In [179]: np.where(np.isnan(R.astype(float)),0,1)
Out[179]:
array([[1, 1, 1, 0, 1],
[0, 1, 1, 1, 1],
[1, 0, 1, 1, 0]])