Python 创建一个矩阵,其中每个元素等于其行和列索引的最小值
我想创建一个矩阵C,其中每个元素都等于其对应的行和列索引的最小值。例如:对应于第一行和第二列的元素的值应为1,对应于第八行和第三列的元素的值应为3,以此类推 我已经编写了以下代码,返回我想要的东西。运行以下代码: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-
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.]])