在python中,我有两个三维数组:
大小为(n,n,n)的T
大小为(k,n,n)的U
可以将T和U看作一个接一个的多个2-D阵列。我需要将所有这些矩阵相乘,即我必须执行以下操作:
for i in range(n):
H[:,:,i] = U[:,:,i].dot(T[:,:,i]).dot(U[:,:,i].T)
由于n可能非常大,我想知道这个操作是否可以用numpy以某种方式加速。
我是Python的新手,目前正在编写一段代码,我想在其中存储一个3维矩阵的以前的迭代,它的一个版本是在for循环的每个步骤中创建的。我想要做的是连接一个新的维数为3+1=4的数组,该数组存储以前的值。现在,这可以通过连接来实现,我让它像这样工作:
import numpy as np
matrix = np.ones((1,lay,row,col), dtype=np.float32)
for n in range(100):
if n == 0:
# initialize the storage matrix
matrix_stored = mat
我一直在探索不同的降维算法,特别是PCA和T。我正在获取MNIST数据集的一个小子集(有780个维度),并试图将原始数据降到三维,以便将其可视化为散点图。T可以用非常详细的描述.
我使用PCA作为the之前的中间降维步骤,正如the最初的创建者在上所描述的那样
我发现space要花费很长时间才能运行(从2000 x 25到2000 x 3特征空间需要10-15分钟),而PCA运行相对较快( 2000 x 780 => 2000 x 20)。
为什么是这种情况?我的理论是,在PCA实现中(直接来自主要作者的Python源代码),他使用Numpy点积符号来计算X和X.T
def pca(X
我正在使用渐近(python3.6,渐近1.0)来帮助计算数学证明中的矩阵变换。
为了计算Schur互补,有必要对由符号矩阵组成的块矩阵进行切片。
直接以下列方式处理汇总表:
M[0:1,1]
不起作用了,我尝试了sympy.matrices.expressions.blockmatrix.blocks,不幸的是,块在寻址一系列块时混淆了矩阵的维数:
from sympy import *
n = Symbol('n')
Aj = MatrixSymbol('Aj', n,n)
M = BlockMatrix([[Aj,
在python中对矩阵和数组执行操作时,我遇到了一个有趣的问题。我正在将一些代码从MATLAB转换到python,而python的这种怪癖在我的代码中产生了大量的bug。
例如:
假设我想用Nx1数组在python中执行此操作
import numpy as np
from numpy.random import randn
...
N = 50
u = np.cumprod(rand(N,1))**(1.0/np.arange(N,0,-1))
我得到的不是两个数组的元素幂,得到一个向量,而是得到这个巨大的矩阵,这不是唯一的例子,
在检查时,我发现,例如,在本例中,np.arange(.
我将在Python上添加矩阵(未完成)。但它显示出一个错误。
m, n = (int(i) for i in raw_input().split())
a = [[0 for i in range(m)] for j in range(n)]
b = [[0 for i in range(m)] for j in range(n)]
c = []
total = []
for i in range(m):
x = raw_input()
for j in range(n):
value = [int(i) for i in x.split()]
c[i
我有以下Python代码。
for i,j,k in itertools.product(range(theta),range(gamma),range(N)):
L = (gamma[j]*math.pi)*((theta[i])**2) + x[n]
因为我有三个循环,变量L本质上是一个三维矩阵.可以对变量L进行索引吗?就像,李,j,k。
在Matlab中,我有两个m-by-n矩阵x和Y,带有n>m,我需要定义一个三维m-by m-n矩阵Z,它的分量可以计算为
for i=2:m
for j=i+1:m
for k=1:n
Z(i,j,k) = (Y(j-1,k)-Y(i-1,k))*X(j-1,k);
end
end
end
由于这些嵌套循环需要很长的计算时间,我一直在寻找一种使用矩阵乘法来定义矩阵Z的方法,但到目前为止我还没有成功。有什么建议吗?
我想索引大量的python矩阵,以便对相应的元素进行计算(主要是点积)。我在使用一个矩阵的非零值来索引一个列更少的矩阵时遇到了一个问题-它抛出了错误,表明索引超出了界限。有没有办法让我告诉python不要关心什么时候索引越界了-忽略那些越界的,只处理那些越界的?代码如下所示:
for u in range (n): # u = row:
U[R[u,:]!=0, u] ...
U的维数是(dxn),R的维数是(nxm),其中m>n>d(通常)。
我希望当索引越界时,python中有什么可以忽略的内置内容?
我有我的矩阵E,我一直在以某种方式填充它(不重要的是如何填写,重要的是条目都与0不同)。矩阵的维数是n_x*n_y X n_x*n_y,其中
n_x = 4
n_y = 8
现在,我将其中一些条目设置为0:
step = 4.
for i in range(n_x):
for j in range(n_y):
if ((i or j)%step != 0):
e[i][j] = 0.
然后,我想去掉等于0的条目,调整我的矩阵大小。我的做法是:
filter(lambda a: a != 0., E)
但我得到的是
filter(lambda a:
我有一个叫做矩阵的二维数组。其中的每个矩阵都是维数1000 x 1000,由正值组成。现在,我想获取所有矩阵中所有值的日志(0除外)。
如何在python中轻松地做到这一点?
我有下面的代码来做我想做的事情,但是了解Python可以做得更简单一些:
newMatrices = []
for matrix in matrices:
newMaxtrix = []
for row in matrix:
newRow = []
for value in row:
if value > 0:
我有两个生成两个矩阵的函数,第一个函数生成一些方阵,第二个函数根据第一个矩阵生成一个一维矩阵。这两个函数都依赖于参数N,第二个函数矩阵结果应该有一个具有(N*2)**2的矩阵。.My问题是当我使用一个大于4的参数N的值时,他们总是在第二个函数结果中缺少10个元素。( OP函数已被删除,以创建一个最小问题。有关详细信息,请查看编辑。下面是一个演示该问题的示例函数
def test(N):
m = []
for i in range(0,(N*2)):
for j in range(-1,(N*7),4):
m
假设我有一个四维矩阵A(:,:)。我想通过对矩阵执行一些处理来更新矩阵。伪码如下所示:
for ii = 1:m
for jj = 1:n
A = myFunction(A(:,:,jj,ii))
end
end
要在Python中实现for循环处理:
for ii in range(m):
for jj in range(n):
A = myFunction(A[:,:,jj,ii])
对吗?
我试图找出一种使用numpy以尽可能高效的方式执行以下代数的方法:
给定三维矩阵/张量,A,具有形状(n, m, p),二维矩阵/张量,B,与形状(n, p),计算C_ij = sum_over_k (A_ijk * B_ik),其中产生的矩阵C将有维数(n,m)。
我试过两种方法。一种是遍历第一维,每次计算一个规则的点积。另一种方法是用np.tensordot(A, B.T)计算形状(n, m, n)的计算结果,然后沿1维和3维取对角线单元。这两种方法如下所示。
第一种方法:
C = np.zeros((n,m))
for i in range(n):
C[i] = np.dot(A
我试图为总能量(H)定义一个数组,其中下列关系为真:
<i_( E_j _>= E_j _
而S,j是重叠矩阵的对应元素。我有矩阵E_j,我试图得到矩阵H,如下所示:
H = np.zeros([M])
for n in range (M):
for m in range(M):
H[n,m]= E[n]*S[n,m]
print ("H = ")
np.savetxt(sys.stdout, H, fmt= '%7.4f')
这给了我错误信息:"IndexError:数组的索引太多了“
我假设这与我试图把一个一维数组
假设一个图由一个n x n维邻接矩阵表示。我知道如何获得所有对的最短路径矩阵。但我想知道是否有一种方法可以追踪所有最短的路径?Blow是python代码的实现。
v = len(graph)
for k in range(0,v):
for i in range(0,v):
for j in range(0,v):
if graph[i,j] > graph[i,k] + graph[k,j]:
graph[i,j] = graph[i,k] + graph[k,j]