我已经搜索了一些关于如何在C 程序中使用 PARI 库的教程,但不幸的是,我只找到了在命令行界面中使用 GP 包的通用教程。
有人可以帮忙吗?例如,我想初始化一个 3x3 矩阵并找到它的 1000 次幂。在 gp(CLI)中,这可以通过键入以下内容来实现:
? A=[1,2,3;4,5,6;7,8,9]
? A^1000
Run Code Online (Sandbox Code Playgroud)
但是我发现在C 源文件中做这个安静简单的事情没有帮助。是否有提供此类示例的综合教程或文档?任何评论将不胜感激!
假设这X是numpy.ndarray一个包含一组彩色图像的张量。例如,X的形状是(100, 3, 32, 32); 即,我们有 100 张 32x32 rgb 图像(例如由 CIFAR 数据集提供的图像)。
我想旋转图像X,我发现这可以使用scipy 的 scipy.ndimage.interpolation.rotate函数来完成。
但是,我每次只能对单个图像和单个颜色通道正确执行此操作,而我想一次对所有图像和所有颜色通道应用该功能。
到目前为止,我尝试并有效的方法如下:
import scipy.ndimage.interpolation
image = X[0,0,:,:]
rotated_image = scipy.ndimage.interpolation.rotate(input=image, angle=45, reshape=False)
Run Code Online (Sandbox Code Playgroud)
但我想做的事,看起来像这样
X_rot = scipy.ndimage.interpolation.rotate(input=X, angle=45, reshape=False)
Run Code Online (Sandbox Code Playgroud)
不起作用。
有没有办法申请scipy.ndimage.interpolation.rotate像numpy.ndarray张量这样的一批图像X?
无论如何,有没有更好的方法来有效地旋转一批图像(存储在 a 中numpy.ndarray)?
让X是一个Bxn numpy矩阵,即
import numpy as np
B = 10
n = 2
X = np.random.random((B, n))
Run Code Online (Sandbox Code Playgroud)
现在,我有兴趣计算所谓的内核(甚至是相似性)矩阵K,它具有形状BxB,其{i,j}第_ 个元素如下:
K(i,j)= fun(x_i,x_j)
其中x_t表示t矩阵的行第X并且fun是一些功能x_i,x_j.例如,这个函数可以是所谓的RBF函数,即
K(i,j)= exp( - | x_i - x_j | ^ 2).
为此,一种天真的方式如下:
K = np.zeros((B, B))
for i in range(X.shape[0]):
x_i = X[i, :]
for j in range(X.shape[0]):
x_j = X[j, :]
K[i, j] = np.exp(-np.linalg.norm(x_i - x_j, …Run Code Online (Sandbox Code Playgroud) 假设我们有一个 3D PyTorch 张量,其中第一个维度表示batch_size,如下所示:
import torch
import torch.nn as nn
x = torch.randn(32, 100, 25)
Run Code Online (Sandbox Code Playgroud)
也就是说,对于每个i,x[i]是一组 100 个 25 维向量。我想计算每个批次项目的这些向量的相似度(例如,余弦相似度——但一般来说是任何这样的成对距离/相似度矩阵)。
也就是说,对于每个x[i]我需要计算一个[100, 100]矩阵,其中包含上述向量的成对相似度。x[t]更具体地说,对于所有,该矩阵的第 (i,j) 个元素应包含 (100x25) 的第 i 行和第 j 行之间的相似度(或距离)t=1, ..., batch_size。
如果我使用torch.nn.CosineSimilarity(),无论dim我使用什么,结果都是[100, 25]( dim=0),或[32, 25]( dim=1) ,其中我需要大小为 的张量[32, 100, 100]。我希望torch.nn.CosineSimilarity()以这种方式工作(因为,至少对我来说,它看起来更直观) ,但事实并非如此。
可以使用类似下面的东西来完成吗?
torch.matmul(x, x.permute(0, 2, 1))
Run Code Online (Sandbox Code Playgroud)
我猜这可以给出距离矩阵,但是如果我需要任意成对运算怎么办?我应该使用上面的内容来构建这个操作吗?
或者也许我应该x以某种方式重复,以便我可以使用内置的torch.nn.CosineSimilarity() …
python similarity cosine-similarity pytorch pairwise-distance
我有兴趣绘制一个实值函数f(x,y,z)=a,其中(x,y,z)是球体上的 3D 点,并且a是实数。我计算球体点的笛卡尔坐标如下,但我不知道如何可视化f每个点的值。
import plotly.graph_objects as go
import numpy as np
fig = go.Figure(layout=go.Layout(title=go.layout.Title(text=title), hovermode=False))
# Create mesh grid for spherical coordinates
phi, theta = np.mgrid[0.0:np.pi:100j, 0.0:2.0 * np.pi:100j]
# Get Cartesian mesh grid
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)
# Plot sphere surface
self.fig.add_surface(x=x, y=y, z=z, opacity=0.35)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我会想象/期望/喜欢这样的可视化
f此外,我还以封闭形式计算了的梯度(即,对于每个(x,y,z)我计算 的 3D 维梯度f)。有没有一种方法可以绘制这个矢量场,类似于上图所示?
假设我们有一个 10x20 的实矩阵:
Eigen::MatrixXd A(10,20);
A.setRandom();
Run Code Online (Sandbox Code Playgroud)
我们想构造一个 10x10 的矩阵
B = [v v ... v v]
其中v是长度为 的列向量10。对于这个向量,v,每个元素都是 A 的每一行的平方范数,即:
v = ( ||x_1||^2, ||x_2||^2, ..., ||x_10||^2,)^T,
其中x_j表示 A 的第 j 行。
构造矩阵的最有效方法是B什么?
我可以构造v如下:
Eigen::VectorXd v(10);
for (int i=1; i<10; i++)
{
v(i) = A.row(i).squaredNorm();
}
Run Code Online (Sandbox Code Playgroud)
我认为这一步没有for循环是无法解决的。我怎么能复制这个列 10 次,这样B就如上面所讨论的那样填充了?
当然v,a是Eigen::VectorXdn维的向量,我想进行以下分段操作:
vby a,即向量的分段乘法(a[1]*v[1], ..., a[n]*v[n]),和v,即矢量(v[1]*v[1], ..., v[n]*v[n]).是否Eigen提供上述操作的方法,还是需要手动实现?当然非常简单,但我希望他们尽可能快地运行.