用零填充numpy数组的下三角形的最佳方法是什么,这样我就不必执行以下操作:
a=np.random.random((5,5))
a = np.triu(a)
Run Code Online (Sandbox Code Playgroud)
因为np.triu返回一个副本,而不是一个视图.因为我正在处理大型数组,所以最好不需要列表索引.
sen*_*rle 13
所以你可以通过以下输出将数组乘以原地tri:
>>> a = np.random.random((5, 5))
>>> a *= np.tri(*a.shape)
>>> a
array([[ 0.46026582, 0. , 0. , 0. , 0. ],
[ 0.76234296, 0.5298908 , 0. , 0. , 0. ],
[ 0.08797149, 0.14881991, 0.9302515 , 0. , 0. ],
[ 0.54794779, 0.36896506, 0.92901552, 0.73747726, 0. ],
[ 0.62917827, 0.61674542, 0.44999905, 0.80970863, 0.41860336]])
Run Code Online (Sandbox Code Playgroud)
比如triu,这仍然会创建第二个数组(输出tri),但至少它会就地执行操作.啪啪是一种捷径; 考虑将您的功能基于完整版本的triu强大功能.但请注意,您仍然可以指定对角线:
>>> a = np.random.random((5, 5))
>>> a *= np.tri(*a.shape, k=2)
>>> a
array([[ 0.25473126, 0.70156073, 0.0973933 , 0. , 0. ],
[ 0.32859487, 0.58188318, 0.95288351, 0.85735005, 0. ],
[ 0.52591784, 0.75030515, 0.82458369, 0.55184033, 0.01341398],
[ 0.90862183, 0.33983192, 0.46321589, 0.21080121, 0.31641934],
[ 0.32322392, 0.25091433, 0.03980317, 0.29448128, 0.92288577]])
Run Code Online (Sandbox Code Playgroud)