如果您对使用Numpyeinsum和使用numpy的什么函数可以求解矩阵的迹感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解使用Numpyeinsum的各种细节,并对使用numpy的什么函数可以
如果您对使用 Numpy einsum和使用 numpy 的什么函数可以求解矩阵的迹感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解使用 Numpy einsum的各种细节,并对使用 numpy 的什么函数可以求解矩阵的迹进行深入的分析,此外还有关于"import numpy as np" ImportError: No module named numpy、3.7Python 数据处理篇之 Numpy 系列 (七)---Numpy 的统计函数、A * B + C使用np.einsum、CuPy.einsum 慢?的实用技巧。
本文目录一览:- 使用 Numpy einsum(使用 numpy 的什么函数可以求解矩阵的迹)
- "import numpy as np" ImportError: No module named numpy
- 3.7Python 数据处理篇之 Numpy 系列 (七)---Numpy 的统计函数
- A * B + C使用np.einsum
- CuPy.einsum 慢?
使用 Numpy einsum(使用 numpy 的什么函数可以求解矩阵的迹)
如何解决使用 Numpy einsum
我正在尝试使用 Numpy 对函数进行矢量化,以计算使用 scikit-learn 拟合的多项 logit 模型中特征的平均边际效应。我已经设法使用 for 循环 进行计算,它看起来像这样
#Get probabilities for each obs i belonging to class j. shape = N * J
probas = fitted_model.predict_proba(X)
#Get coefficients. Shape j_classes * k_coefficients
betas = fitted_model.coef_
J = probas.shape[1]
N = probas.shape[0]
K = betas.shape[1]
avg_margins = np.zeros([K,J])
for j in tqdm(range(J)):
for k in range(K):
dydw = 0
for i in range(N):
dydw += probas[i,j] * (betas[j,k] - np.dot(probas[i,:],betas[:,k]))
avg_margins[k,j] = 1 / N * dydw
然而,这很慢,为什么我想要摆脱循环。我是 Numpy 和线性代数的初学者,所以请多多包涵,但我认为我最好的选择是使用 numpy einsum
,到目前为止我得到的就是这个
avg_margins = 1 / N * np.einsum(''ij,jk -> kj'',probas,betas - np.einsum(''im,mk -> k'',betas))
不幸的是,这返回了错误的结果,我不确定我哪里出错了。任何有关我哪里出错的帮助或提示将不胜感激!
解决方法
这里不需要 einsum:
diff = betas[:,None] - np.dot(probas,betas)
avg_margins = np.sum(probas * diff.T,axis=1) / N
"import numpy as np" ImportError: No module named numpy
问题:没有安装 numpy
解决方法:
下载文件,安装
numpy-1.8.2-win32-superpack-python2.7
安装运行 import numpy,出现
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
import numpy
File "C:\Python27\lib\site-packages\numpy\__init__.py", line 153, in <module>
from . import add_newdocs
File "C:\Python27\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "C:\Python27\lib\site-packages\numpy\lib\__init__.py", line 8, in <module>
from .type_check import *
File "C:\Python27\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
import numpy.core.numeric as _nx
File "C:\Python27\lib\site-packages\numpy\core\__init__.py", line 6, in <module>
from . import multiarray
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
原因是:python 装的是 64 位的,numpy 装的是 32 位的
重新安装 numpy 为:numpy-1.8.0-win64-py2.7
3.7Python 数据处理篇之 Numpy 系列 (七)---Numpy 的统计函数
目录
[TOC]
前言
具体我们来学 Numpy 的统计函数
(一)函数一览表
调用方式:np.*
.sum(a) | 对数组 a 求和 |
---|---|
.mean(a) | 求数学期望 |
.average(a) | 求平均值 |
.std(a) | 求标准差 |
.var(a) | 求方差 |
.ptp(a) | 求极差 |
.median(a) | 求中值,即中位数 |
.min(a) | 求最大值 |
.max(a) | 求最小值 |
.argmin(a) | 求最小值的下标,都处里为一维的下标 |
.argmax(a) | 求最大值的下标,都处里为一维的下标 |
.unravel_index(index, shape) | g 根据 shape, 由一维的下标生成多维的下标 |
(二)统计函数 1
(1)说明
(2)输出
.sum(a)
.mean(a)
.average(a)
.std(a)
.var(a)
(三)统计函数 2
(1)说明
(2)输出
.max(a) .min(a)
.ptp(a)
.median(a)
.argmin(a)
.argmax(a)
.unravel_index(index,shape)
作者:Mark
日期:2019/02/11 周一
A * B + C使用np.einsum
如何解决A * B + C使用np.einsum?
我正在尝试使用 np.einsum 进行此非常简单的操作,但是我仍然很难理解如何使用它。
我有以下3个数组:
A = np.zeros((8,8))
B = np.zeros((64))
C = np.zeros((64,8,8))
首先,我首先将A * B“按通道”相乘(这意味着A与B中的每个元素相乘,所以结果将是(64,8,8)),然后我将这个结果与C相加。如何使用 np.einsum 执行此操作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
CuPy.einsum 慢?
如何解决CuPy.einsum 慢?
我最近开始使用 CuPy。在我的应用程序中,函数 einsum
似乎没有一致的执行速度。在下面的第一个示例中,它最多比 tensordot
函数慢 5 倍(例如,对于 M = 128 和 2048)。在下面的第二个示例中,它比 dot
慢,但与 tensordot
一样快。我在使用 einsum
时是否犯了错误?
我的代码:
import numpy as np
import cupy as cp
import timeit
import tabulate
nrepeats = 1000
alpha_max= 11
cp.random.seed(123)
Ts = []
Ms = 2**(1+np.arange(3,alpha_max))
chi = cp.array([[0.,2.5,5.5],[2.5,0.,2.5],[5.5,0. ]])
# 1st test
for M in Ms:
#print(M)
shape = [3,M,M]
ndim = len(shape)
phi = cp.random.rand(*shape)
t_1 = timeit.timeit(lambda: cp.einsum(''mn,n...->m...'',chi,phi),number=nrepeats) / float(nrepeats)
t_2 = timeit.timeit(lambda: cp.einsum(''mn,number=nrepeats) / float(nrepeats)
t_3 = timeit.timeit(lambda: cp.tensordot(chi,phi,axes=([1],[0])),number=nrepeats) / float(nrepeats)
Ts.append([t_1,t_2,t_3])
data = np.array(Ts)
data = np.concatenate([Ms.reshape(-1,1),data],axis=1)
print("1st test")
print(tabulate.tabulate(data,tablefmt=''simple'',headers=[''M''] + ["t_{:d}".format(i) for i in range(1,data.shape[1])]))
print("")
# 2nd test
Ts = []
for M in Ms:
#print(M)
phi = cp.random.rand(M,M)
mat = cp.random.rand(M,M)
t_1 = timeit.timeit(lambda: cp.einsum(''mn,mat,number=nrepeats) / float(nrepeats)
t_2 = timeit.timeit(lambda: cp.dot(mat,number=nrepeats) / float(nrepeats)
t_3 = timeit.timeit(lambda: cp.tensordot(mat,axis=1)
print("2nd test")
print(tabulate.tabulate(data,data.shape[1])]))
我的结果:
1st test
M t_1 t_2 t_3
---- ----------- ----------- -----------
16 0.000625728 0.000117246 2.18285e-05
32 0.000116557 0.000116172 2.16212e-05
64 0.000116819 0.000117002 2.15155e-05
128 0.000116461 0.000116047 2.16749e-05
256 0.000159753 0.000240077 7.99196e-05
512 0.00063619 0.00093989 0.000312955
1024 0.0028338 0.00372209 0.00106168
2048 0.0128821 0.0149504 0.00289213
2nd test
M t_1 t_2 t_3
---- ----------- ----------- -----------
16 0.000252584 9.88275e-06 1.89785e-05
32 0.000111875 1.03006e-05 2.8993e-05
64 0.000117031 1.05121e-05 6.57232e-05
128 0.000165988 3.82686e-05 7.81205e-05
256 0.000161549 0.000117307 0.000154361
512 0.000745595 0.000655062 0.000870415
1024 0.00495882 0.00228163 0.00665659
2048 0.0411153 0.017304 0.0508659
我的系统:
- 在基于
nvidia/cuda:11.0-runtime
的 docker 容器中运行。 - GPU。 GeForce RTX 2080 8Gb
今天的关于使用 Numpy einsum和使用 numpy 的什么函数可以求解矩阵的迹的分享已经结束,谢谢您的关注,如果想了解更多关于"import numpy as np" ImportError: No module named numpy、3.7Python 数据处理篇之 Numpy 系列 (七)---Numpy 的统计函数、A * B + C使用np.einsum、CuPy.einsum 慢?的相关知识,请在本站进行查询。
本文标签: