import numpy as np
arr = np.diagflat([1,1,1],2) # now we have 1s in upper-right part
arr = np.maximum(arr,np.flip(arr,1)) # now we have 1s in upper part
arr = np.maximum(arr,np.flip(arr,0)) # now we have 1s everywhere
print(arr)
def diamond_Daweo(n):
arr = np.diagflat(np.ones(n), n-1) # now we have 1s in upper-right part
arr = np.maximum(arr,np.flip(arr,1)) # now we have 1s in upper part
return np.maximum(arr,np.flip(arr,0)) # now we have 1s everywhere
%timeit diamond_Daweo(100)
120 µs ± 1.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit diamond(100)
75.8 µs ± 2.86 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
我将以以下方式利用
numpy.diagflat
与numpy.flip
的结合:输出:
这里有一个
np.eye
的解决方案输出:
使用
np.pad(... mode = 'reflect')
的我的条目:在我看来,这比@Daweo的答案快了40%左右,代码也稍微简单一些
相关问题 更多 >
编程相关推荐