Python 生成具有m和n个整数的隔离矩阵
当我们给出m和n个正整数时,如何生成以边界1和0为核心的矩阵Python 生成具有m和n个整数的隔离矩阵,python,arrays,numpy,Python,Arrays,Numpy,当我们给出m和n个正整数时,如何生成以边界1和0为核心的矩阵 Input: 4,5 Output [1, 1, 1, 1, 1] [1, 0, 0, 0, 1] [1, 0, 0, 0, 1] [1, 1, 1, 1, 1] 我使用了这个代码。有没有其他方法可以得到输出 import numpy as np a=np.ones((m,n),dtype="int") a[1:-1,1:-1]=0 另一个类似的解决方案,但我更喜欢问题中建议
Input:
4,5
Output
[1, 1, 1, 1, 1]
[1, 0, 0, 0, 1]
[1, 0, 0, 0, 1]
[1, 1, 1, 1, 1]
我使用了这个代码。有没有其他方法可以得到输出
import numpy as np
a=np.ones((m,n),dtype="int")
a[1:-1,1:-1]=0
另一个类似的解决方案,但我更喜欢问题中建议的解决方案:
a=np.zeros((m,n),dtype="int")
a[[0,-1]] = 1
a[:,[0,-1]] = 1
或根据@Paul在评论中的建议:
a[::m-1] = a[:,::n-1] = 1
编辑:根据以下OP评论:
阵列列表:
a = [x for x in a]
列表数组:
b = np.empty(m,dtype=object)
b[:] = a.tolist()
这个解决方案已经相当不错了,您想要改进的是什么?我非常确定,对于足够大的阵列,这将比OP更快。为了使它更快:在花哨的索引
a[::m-1]=a[:,::n-1]=1
上使用普通切片,但是我使用的解决方案生成了一个2D矩阵。我需要为每一行创建一个单独的列表@保尔·帕泽尔对切片提出了很好的建议。你能解释一下为什么它更快吗?此外,还有更多的单元格被赋予新的值(如果这不是唯一的原因)。出于可读性原因,我喜欢OP的解决方案。不过,您建议的版本也同样可读。感谢you@Kishan您需要一个1-D列表数组(用于行)而不是2-D数组?除此之外,至少在linux上,零比一快得多。我认为这是因为存在一个专门的系统调用来分配零(calloc
,我认为),而不是分配一。