Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成具有m和n个整数的隔离矩阵_Python_Arrays_Numpy - Fatal编程技术网

Python 生成具有m和n个整数的隔离矩阵

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 另一个类似的解决方案,但我更喜欢问题中建议

当我们给出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

另一个类似的解决方案,但我更喜欢问题中建议的解决方案:

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
,我认为),而不是分配一。