我很难理解np.fill_diagonal是如何在这里实现的。
我找到了一篇文章,解释了一种用特定值填充次对角线和超对角线的方法,但我并不真正理解该函数的参数。代码如下:
a = np.zeros((4, 4))
b = np.ones(3)
np.fill_diagonal(a[1:], b)
np.fill_diagonal(a[:,1:], -b)
我不明白fill_diagonal在这里是怎么用的。我认为第二个参数必须是一个。另外,我不明白'a‘的片断是怎么回事。
我第一次使用numpy。
我有一个方阵(158乘158)。我希望将矩阵对角线上的任何NaN值替换为对角的中值。任何偏离对角线的值,我想要为零。
我写的代码不管用,
cov_martix = np.cov(np.transpose(coeff), rowvar=False)
# any nan's on the diagional are replaced by the median value of the diag
# any nan's off the diag are replaced with zero
diag = np.nanmedian(np.diag(cov_
如果我有数组[[1,0,0],[0,1,0],[0,0,1]] (让我们这样称呼它),它是作为numpy.eye(3)完成的。我怎么能得到对角线下面的元素只有2和3像这个[[1,0,0],[2,1,0],[3,2,1]] ??如何将数组的向量分配给不同的值集?
我知道我可以使用numpy.concatenate连接3个向量,我知道如何更改行/列,但我不知道如何更改主对角线以下的对角线。
我试着做np.diagonal(So,-1)=2*np.diagonal(So,-1)来更改主对角线下面的对角线,但是我得到了错误消息cannot assign to function call。
我有一个相当大的矩形numpy数组,形状为(m, n),例如:
>>> a.shape
(27584, 34092)
我必须计算数组中每个的和。这个新数组将具有(m + n - 1,)的形状。
简化的做法是:
m, n = a.shape
r = np.zeros(m + n - 1)
for i in range(m):
for j in range(n):
r[i + j] += a[i][j]
# r is the sum of all anti-diagonals of a
这显然是非常缓慢的,有任何方法来执行计算使用一个聪明的numpy原语
我目前正在尝试迭代一个矩阵,并按照一些逻辑修改其中的元素。我尝试使用迭代矩阵的标准过程,但这只是在当前索引处输出元素,而不更新矩阵本身。
这就是我尝试过的:
for row in initial_matrix:
for element in row:
if np.random.rand() > 0.5: element = 0
print(element)
print(initial_matrix)
然而,这并没有更新initial matrix,我也尝试过:
for row in range(len(initial_matrix)):
我有一个称为对角线的二维数组,其中每一行代表一个二维矩阵的对角线。创建3d数组diag_matricies的最快/最好方法是什么,其中最后两个维度都由使用对角线行创建的对角矩阵组成?
在一个循环中,这就是我想要的:
import numpy as np
diag_matricies = np.zeros([3,3,3])
diagonals = np.array([[1,2,3],[4,5,6],[7,8,9]])
for i in range(3):
diag_matricies[i] = np.diag(diagonals[i,:])
print(diag_matricie
我是numpy的新手,我想计算numpy数组中所有非对角线元素的abs之和。矩阵的元素是矩阵的所有元素,但在矩阵的主对角线中的元素除外。
我想要计算它们的abs之和,以便实现 of
因此,为了计算它,我认为这段代码会工作:
import numpy as np
off_diagonal_sum = 0
for i in range(n): # n is the dimension of our square matrix
# mat is our matrix
off_diagonal_sum = off_diagonal_sum + np.sum(np.abs(mat[i,
我有一段代码:
other = np.random.rand((m,n,o))
prev = np.random.rand((m,n,o,m,n,o))
mu = np.zeros((m,n,o,m,n,o))
for c in range(m):
for i in range(n):
for j in range(o):
mu[c,i,j,c,i,j] = other[c,i,j]*prev[c,i,j,c,i,j]
我希望使用einsum表示法来简化它(可能通过跳过python中的for循环来节省时间)。然而,经过几次尝试,我最终还是不知道如何处理这个问
我创造了X作为折页
num_locations = 2
X= [ ]
for n in range(num_locations):
X.append([0 for j in range(num_locations)])
现在,我想对n != m的情况求和这些Xn值。结果应该是
X[0][1]+X[1][0]
有什么方法可以用和式来做吗?
X[n][m] for n in range(num_locations)for m in range(num_locations))
我试图执行一个矩阵乘法,它有以下方案:
C = np.dot(np.dot(sparse.csr_matrix(np.double(A).transpose()),sparse.spdiags(B,0,Ngrid,Ngrid)), sparse.csr_matrix(np.double(A)))
因此,我想转置矩阵A,它导致M>>N的N矩阵,并与对角矩阵M矩阵相乘。B是“主要对角线”。得到的矩阵( N )应与矩阵A ( M )相乘,从而得到N矩阵C。
出现的错误如下:
<2000x921600 sparse matrix of type '<class '
Matlab用稀疏命令计算对角线矩阵的逆需要0.02秒。
P = diag(1:10000);
P = sparse(P);
tic;
A = inv(P);
toc
然而,对于Python代码来说,这需要花费很长时间--几分钟。
import numpy as np
import time
startTime = time.time()
P = np.diag(range(1,10000))
A = np.linalg.inv(P)
runningTime = (time.time()-startTime)/60
print "The script was running for
我想创建3D对角线矩阵。我已经成功地用numpy例程numpy.fill_diagonal(numpy.zeros((N, N, N)), n)创建了一个,但是它不允许选择对角线来填充。 换句话说,我想找到这个numpy例程的3D推广:https://numpy.org/doc/stable/reference/generated/numpy.diag.html。谢谢。