我有一个用shape (N,3)存储在numpy数组A中的3D点列表,以及一个用shape (3,3)存储的旋转矩阵R。我想计算A中每个点R.x的点积。我可以很天真地这样做:
for n in xrange(N):
A[n,:] = dot(R, A[n,:])
有没有一种方法可以通过本地numpy调用将其向量化?如果重要的话,N是几千的数量级。
我需要从权重矩阵的值开始创建一个矩阵。在创建和迭代矩阵时,哪种结构在速度上是保持矩阵的最佳结构?我在考虑一个列表或一个numpy 2D数组,但它们在我看来都很慢。我需要的是:
numpy array
A = np.zeros((dim, dim))
for r in range(A.shape[0]):
for c in range(A.shape[0]):
if(r==c):
A.itemset(node_degree[r])
else:
A.itemset(arc_weight[r,c])
或
list
我想创建3D对角线矩阵。我已经成功地用numpy例程numpy.fill_diagonal(numpy.zeros((N, N, N)), n)创建了一个,但是它不允许选择对角线来填充。 换句话说,我想找到这个numpy例程的3D推广:https://numpy.org/doc/stable/reference/generated/numpy.diag.html。谢谢。
我正在使用Python和Numpy进行一些数据分析。
我有一个很大的3D矩阵(NxNxN),其中每个单元都是一个矩阵,这次是一个3x3矩阵。调用矩阵data,它看起来像这样:
data[N,N,N,3,3]
我需要找出所有3x3矩阵的特征值,为此我使用了Numpy的eigvals例程,但这需要很长时间。现在我差不多是这样做的:
for i in range(N):
for j in range(N):
for k in range(N):
a = np.linalg.eigvals(data[i,j,k,:,:])
对于N= 256,这大约需
蓄积期
在脚本中,相同大小的数据矩阵X被某些模型(这里只是随机数生成器)重新估计,并在有限的试验过程中累积/保存在矩阵Y中。
import numpy as np
from numpy.random import random
import pandas as pd
k = 3 #shape
t = 5 #trials
Y = np.zeros((t,k,k))
for i in range(5):
X = random((k,k)) #2D estimate
X = pd.DataFrame(X)
Y[i,:,:] = X #3D tensor
我有一个带有2d点的numpy数组,我通过下面的等式将其从3d转换为2d: https://wikimedia.org/api/rest_v1/media/math/render/svg/198f15da062c7ce00598d7a2f9bd8169d7042ed3 如何将点转换回3D? 我使用了上图中的自上而下视图矩阵。可在维基百科找到:https://en.wikipedia.org/wiki/Orthographic_projection #To 2D from 3d:
points2D = np.array([np.matmul(camera_pos, point) for poi
在NumPy中有两个4d矩阵,它们的高度、宽度和深度是相同的。
x = np.random.random((125,3,4,4)).astype(np.float32)
y = np.random.random((14,3,4,4)).astype(np.float32)
我想把x中的每个三维矩阵与y中的每个3d矩阵相乘,这样得到的结果是一个5d矩阵,其形状为res[x.shape,y.shape,.]。目前,我正在遵循此代码。
xb,xd,xh,xw = x.shape
yb,yd,yh,yw = y.shape
res = np.zeros((xb,yb,xd,xh,xw))
for i
我想用python以最快的方式计算一个内核矩阵:输入是一个矩阵X= n样本,n特征,输出应该是一个对称矩阵D=n样本,n样本
我现在使用的方法,即使是基于迭代器的,对for循环的处理似乎非常慢……有人能想出更好的办法吗?
谢谢
到目前为止我的方法是:
from itertools import combinations
def computeKernel(X,dlambda):
nsamples=X.shape[0]
D=numpy.zeros((nsamples,nsamples))
for el in combinations(range(nsamples),2):
我有一个3D numpy数组vecs。vecs的形状为[M,N,3]。也就是说,vecs是三元素向量的MxN集合.我在找一种丙酮(numpythonic?)用单个3x3矩阵mat获取每个向量的矩阵乘积的方法。换句话说,我想要一个干净的方法来做到这一点:
>>> for k in range(vecs.shape[0]):
>>> for j in range(vecs.shape[1]):
>>> vecs[k,j] = np.dot(mat, vecs[k,j])
有什么办法吗?
我正在尝试用张量做矩阵乘法,但我不确定如何用Numpy做。我一直在尝试使用np.tensordot(),但我还没能做到
以一种更简单的方式,如果我们要做矩阵乘法,并且我们有一个向量v (Nx1)和一个矩阵S (NxN),我们就可以进行运算
v^T S v => (1xN)(NxN)(Nx1) =>数字
v = np.ones((3,1))
S = np.ones((3,3))
y = v.T.dot(S).dot(v)
y.shape = (1) or ()
现在,我想做以下几件事:
设矩阵M (3x5)和张量Z (5x3x3),这样我就可以
M^T Z M
其中(M^T Z)产生
使用python/numpy,我可以创建我想要的3D数组(注意矩阵指数函数),如下所示
import numpy as np
from scipy.linalg import expm
a = np.arange(3)
B = np.ones((2,2))
C = np.zeros((2,2,3))
for i in range(3):
C[:,:,i] = expm(a[i]*B)
这产生了C语言的3D数组
[[[ 1. 4.19452805 27.79907502]
[ 0. 3.19452805 26.79907502]]
我尝试在Python中通过用2D数组填充来形成3D数组。N是一个根据正在读取的文件而变化的数字。矩阵正在形成为3D,但似乎只有1个‘层’,而我期望它有N个层。似乎N个“层”没有传递到形成的数组中。
import numpy as np
#'rot' is a 3D matrix of shape (N,3,3)
a=np.array(rot[:,0,0])
b=np.array(rot[:,0,1])
c=np.array(rot[:,0,2])
d=np.array(rot[:,1,0])
e=np.array(rot[:,1,1])
f=np.array(rot[:,1,
我有一个3465x 50157的NumPy矩阵,并尝试使用矩阵中选定列中的每个唯一值作为阈值来测试特定的计算。考虑以下示例:
feat_num = 4
thresholds = np.unique(X[:, feat_num])
for thresh in thresholds:
y_left = np.array([
y[i] for i in range(X.shape[0]) if X[i, feat_num] < thresh
])
运行此程序时,numpy给我以下错误:
ValueError: The truth value of an arr
我有一个3d坐标数组3xN,我想高效地计算所有条目的距离矩阵。除了嵌套循环之外,有没有什么有效的循环策略可以应用?
当前伪代码实现:
for i,coord in enumerate(coords):
for j,coords2 in enumerate(coords):
if i != j:
dist[i,j] = numpy.norm(coord - coord2)
我有一个很大的3D矩阵来表示代理在3D空间中的位置。如果矩阵上没有代理,则矩阵的值为0;如果矩阵上有代理,则矩阵的值为1。然后,我的问题是,我希望代理在某种意义上“增长”,即我希望它们由比方(3x3x3)的1确定。如果已经有办法做到这一点,但是当智能体靠近边界时,我遇到了麻烦。例如,我有一个位置矩阵100x100x100,如果我知道我的代理在位置(x,y,z),我会这样做: positions_matrix = numpy.zeros((100, 100, 100))
positions_matrix[x - 1: x + 2, y - 1: y + 2, z - 1: z + 2] +=
我有一个3D数组,我想获得一个沿X-Y的2D图像,每个点的最大z值,并将其保存为numpy数组。
import numpy as num
matrix=num.load('3d')
nx,ny,nz=num.shape(matrix)
CXY=num.zeros([ny, nx])
for i in range(ny):
for j in range(nx):
CXY[i,j]=num.max(matrix[j,i,:])
问题是如何保存所获得的矩阵。我想用numpy.save保存它,但是我总是得到一个空数组。有没有人有建议来正确
考虑数组r,维数N,m,其中N是时间索引,m是网络中的元素数。考虑到这些 m 元素相互连接,但元素i在元素j中的影响需要一定时间才能发生,即延迟矩阵delayMat给出的每个连接之间都存在延迟,其维数为m,m。
这么说,我有以下问题:我想用数组r的值创建一个矩阵m,m,但是在delayMat之后使用适当的时间筛选(延迟)。这样做的一种方法是:
delay = n - delayMat
drate = np.zeros([m,m])
for i in range(m):
for j in range(m):
drate[j,i]=r[delay[j,i],i]
其中,n
this = rand(100,3,4)
for i in range(0,100):
for j in range(0,3):
for k in range(0,4):
if rand()<0.5:
this[i,j,k]=0
其中rand是numpy.random.rand
以上内容能否用链表理解方式写出?
目的:用一定的概率(0.5)给“此”(3D矩阵)中的每个项赋值0。
我试图找到一个解释,为什么我使用Numba的矩阵乘法比使用NumPy的点函数慢得多。虽然我使用Numba编写矩阵乘法函数的最基本的代码,但我不认为性能显著降低是由于算法。为简单起见,我考虑两个k x k方阵,A和B。我的代码是
1 @njit('f8[:,:](f8[:,:], f8[:,:])')
2 def numba_dot(A, B):
3
4 k=A.shape[1]
5 C = np.zeros((k, k))
6
7 for i in range(k):
8 for j in