将矩阵元素设置为等于子列表



将索引元素从列表复制到现有数组的python等价物是什么。这是下面要在Python中重新创建的matlab代码:

N = 5
cov_mat = ones(N, N+1)*-1
row = 1:1:N;
for n=1:N
cov_mat(n, 1:N+1-n) = row(n:N);
end

您忘记向我们展示MATLAB代码的功能。我的MATLAB内存已经过时了,所以我无法在脑海中轻松运行它:(

在Octave会话中:

>> N=5;
>> cov_mat = ones(N,N+1)*-1;
>> row=1:1:N;
>> row
row =
1   2   3   4   5
>> cov_mat(1,1:N+1-1) = row(1:N);
>> cov_mat
cov_mat =
1   2   3   4   5  -1
-1  -1  -1  -1  -1  -1
-1  -1  -1  -1  -1  -1
-1  -1  -1  -1  -1  -1
-1  -1  -1  -1  -1  -1
>> cov_mat(2,1:N+1-2) = row(2:N);
>> cov_mat(3,1:N+1-3) = row(3:N);
>> cov_mat
cov_mat =
1   2   3   4   5  -1
2   3   4   5  -1  -1
3   4   5  -1  -1  -1
-1  -1  -1  -1  -1  -1
-1  -1  -1  -1  -1  -1

因此,您将all设置为-1,然后用该范围的切片填充三角形。

numpy等价物(经过一点尝试和错误以获得正确的索引(:

In [134]: N=5
In [135]: res = -np.ones((N,N+1),int)
In [136]: for i in range(N):
...:     res[i,:N-i]=1+np.arange(i,N)
...: 
...: 
In [137]: res
Out[137]: 
array([[ 1,  2,  3,  4,  5, -1],
[ 2,  3,  4,  5, -1, -1],
[ 3,  4,  5, -1, -1, -1],
[ 4,  5, -1, -1, -1, -1],
[ 5, -1, -1, -1, -1, -1]])

在这两种语言中,避免行迭代是很好的,但这可能不值得付出努力。

我们可以用对三角形值进行索引

In [145]: res[np.arange(5)[:,None]<np.arange(6)[::-1]]
Out[145]: array([1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5])

也许是这样?

a = [1, 1, 1, 1, 1]
b = [2, 3]
a[3:5] = b
print(a) # [1, 1, 1, 2, 3]

相关内容

  • 没有找到相关文章

最新更新