小编nul*_*tto的帖子

如何使用 PARI C 库

我已经搜索了一些关于如何在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 源文件中做这个安静简单的事情没有帮助。是否有提供此类示例的综合教程或文档?任何评论将不胜感激!

pari pari-gp

7
推荐指数
1
解决办法
1164
查看次数

使用 `scipy.ndimage.interpolation.rotate` 旋转一批图像

假设这Xnumpy.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)?

python rotation scipy batch-processing ndimage

6
推荐指数
1
解决办法
626
查看次数

Python中相似度矩阵的高效计算(NumPy)

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)

python performance numpy similarity vectorization

4
推荐指数
3
解决办法
1320
查看次数

PyTorch 中一组向量之间的成对相似度矩阵

假设我们有一个 3D PyTorch 张量,其中第一个维度表示batch_size,如下所示:

import torch
import torch.nn as nn
x = torch.randn(32, 100, 25)
Run Code Online (Sandbox Code Playgroud)

也就是说,对于每个ix[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

4
推荐指数
1
解决办法
1万
查看次数

使用plotly(python)在球体表面上绘制密度函数

我有兴趣绘制一个实值函数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)。有没有一种方法可以绘制这个矢量场,类似于上图所示?

python visualization plotly plotly-python

3
推荐指数
1
解决办法
643
查看次数

复制列 VectorXd 以在 Eigen、C++ 中构造 MatrixXd

假设我们有一个 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就如上面所讨论的那样填充了?

c++ replicate eigen

2
推荐指数
1
解决办法
3583
查看次数

分段方形的矢量,C++ Eigen中两个向量的分段产品

当然v,aEigen::VectorXdn维的向量,我想进行以下分段操作:

  • vby a,即向量的分段乘法(a[1]*v[1], ..., a[n]*v[n]),和
  • 分段的正方形v,即矢量(v[1]*v[1], ..., v[n]*v[n]).

是否Eigen提供上述操作的方法,还是需要手动实现?当然非常简单,但我希望他们尽可能快地运行.

vector square piecewise eigen c++11

1
推荐指数
1
解决办法
1518
查看次数