设置矩阵元素等于子列表
Setting matrix elements equal to sub list
什么是 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
也许是这个?
a = [1, 1, 1, 1, 1]
b = [2, 3]
a[3:5] = b
print(a) # [1, 1, 1, 2, 3]
您忘记向我们展示 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
因此您将所有设置为 -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])
什么是 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
也许是这个?
a = [1, 1, 1, 1, 1]
b = [2, 3]
a[3:5] = b
print(a) # [1, 1, 1, 2, 3]
您忘记向我们展示 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
因此您将所有设置为 -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])