我试图将一段MATLAB代码转换为python,MATLAB代码如下:
M = 0;
for k=1:i
M = [M, M, M;
M, ones(3^(k-1)), M;
M, M, M];
end
它创造了一个模仿sierpinski地毯的二维阵列 我的python实现是这样的:
M = 0
for x in range(1,count):
square = np.array([[M, M, M], [M, np.ones([3**(x-1),3**(x-1)]), M], [M, M, M]])
我知道我遗漏了数组如何连接的性质,因为我的python输出有两个以上的维度。我如何维护一个创建相同输出的二维数组?
你可以使用block()
import numpy as np
M = 0
for k in range(count):
I = np.ones((3**k, 3**k))
M = np.block([[M, M, M],
[M, I, M],
[M, M, M]])
例如,对于count = 4
,您将获得以下输出(使用matplotlib绘制 - 如果您有兴趣制作此类绘图让我知道):
您需要先将M设置为二维数组,然后根据其轴使用连接。接下来,在python中,范围可以计算为独占。因此,您需要添加1。
您的代码被修改为以下内容:
import numpy as np
import matplotlib.pylab as plt
def sierpinski(count=3):
M = np.array([[0]])
for x in range(1,count+1):
M = np.concatenate((np.concatenate((M, M, M), axis=1),
np.concatenate((M, np.ones([3**(x-1),3**(x-1)]), M), axis=1),
np.concatenate((M, M, M), axis=1)),axis=0)
return M
# run the code
M=sierpinski()
plt.spy(M)
plt.show()