我想从数组b
创建一个二维矩阵a
,其中a
包含每个矩阵列的range_stop值。
例如,我想使用a = [2,3]
b = [[0, 0],
[1, 1],
[2, 2],
[NaN, 3]]
(向量化计算)最有效的方法是什么?我当前的代码是:
a = [2,3]
b = np.zeros((max(a)+1,len(a)))
b.fill(np.nan)
for i,ai in enumerate(a):
b[:ai, i] = np.arange(ai)
答案 0 :(得分:0)
您可以先使用arange
创建二维repeat
a = np.asarray([2, 3])
b = np.repeat(np.arange(np.max(a) + 1, dtype=float)[:, None], len(a), axis=1)
# array([[0., 0.],
# [1., 1.],
# [2., 2.],
# [3., 3.]])
,然后将每列与a
进行比较以填写np.nan
s
b[b > a] = np.nan
# array([[ 0., 0.],
# [ 1., 1.],
# [ 2., 2.],
# [nan, 3.]])