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 创建一个矩阵,其中每个元素等于其行和列索引的最小值_Python_Arrays_Numpy - Fatal编程技术网

Python 创建一个矩阵,其中每个元素等于其行和列索引的最小值

Python 创建一个矩阵,其中每个元素等于其行和列索引的最小值,python,arrays,numpy,Python,Arrays,Numpy,我想创建一个矩阵C,其中每个元素都等于其对应的行和列索引的最小值。例如:对应于第一行和第二列的元素的值应为1,对应于第八行和第三列的元素的值应为3,以此类推 我已经编写了以下代码,返回我想要的东西。运行以下代码: from numpy import empty C = empty(shape=(32,32)) for j in range(1,33): for i in range(1,33): minimum = min(i,j) C[i-1][j-

我想创建一个矩阵C,其中每个元素都等于其对应的行和列索引的最小值。例如:对应于第一行和第二列的元素的值应为1,对应于第八行和第三列的元素的值应为3,以此类推

我已经编写了以下代码,返回我想要的东西。运行以下代码:

from numpy import empty

C = empty(shape=(32,32))

for j in range(1,33):
    for i in range(1,33):
        minimum = min(i,j)
        C[i-1][j-1] = minimum

print(C)
导致

[[  1.   1.   1. ...,   1.   1.   1.]
 [  1.   2.   2. ...,   2.   2.   2.]
 [  1.   2.   3. ...,   3.   3.   3.]
 ..., 
 [  1.   2.   3. ...,  30.  30.  30.]
 [  1.   2.   3. ...,  30.  31.  31.]
 [  1.   2.   3. ...,  30.  31.  32.]]

问题:这是最有效的方法吗?若否,;如何改进此方法?

选项1
np.mgrid

np.mgrid[1:33, 1:33].min(axis=0)


选项2
np.索引

(np.indices((32, 32)) + 1).min(axis=0)


另一种方法是执行上三角矩阵的累积和,该矩阵包含沿每列的所有1:

In [16]: np.cumsum(np.triu(np.ones((32,32))), axis=0)
Out[16]:
array([[  1.,   1.,   1., ...,   1.,   1.,   1.],
       [  1.,   2.,   2., ...,   2.,   2.,   2.],
       [  1.,   2.,   3., ...,   3.,   3.,   3.],
       ...,
       [  1.,   2.,   3., ...,  30.,  30.,  30.],
       [  1.,   2.,   3., ...,  30.,  31.,  31.],
       [  1.,   2.,   3., ...,  30.,  31.,  32.]])
显然不如
mgrid
方法有效,但我认为这是一个很好的选择

array([[ 1,  1,  1, ...,  1,  1,  1],
       [ 1,  2,  2, ...,  2,  2,  2],
       [ 1,  2,  3, ...,  3,  3,  3],
       ...,
       [ 1,  2,  3, ..., 30, 30, 30],
       [ 1,  2,  3, ..., 30, 31, 31],
       [ 1,  2,  3, ..., 30, 31, 32]])
In [16]: np.cumsum(np.triu(np.ones((32,32))), axis=0)
Out[16]:
array([[  1.,   1.,   1., ...,   1.,   1.,   1.],
       [  1.,   2.,   2., ...,   2.,   2.,   2.],
       [  1.,   2.,   3., ...,   3.,   3.,   3.],
       ...,
       [  1.,   2.,   3., ...,  30.,  30.,  30.],
       [  1.,   2.,   3., ...,  30.,  31.,  31.],
       [  1.,   2.,   3., ...,  30.,  31.,  32.]])