我正在比较numpy和matlab的性能,在一些情况下我观察到numpy明显变慢(索引,对数组的简单操作,如绝对值,乘法,求和等).让我们看看下面的例子,它以某种方式引人注目,涉及函数digitize(我打算用它来同步时间戳):
import numpy as np
import time
scale=np.arange(1,1e+6+1)
y=np.arange(1,1e+6+1,10)
t1=time.time()
ind=np.digitize(scale,y)
t2=time.time()
print 'Time passed is %2.2f seconds' %(t2-t1)
Run Code Online (Sandbox Code Playgroud)
结果是:
时间过去了55.91秒
现在让我们使用等效函数histc尝试相同的Matlab 示例
scale=[1:1e+6];
y=[1:10:1e+6];
tic
[N,bin]=histc(scale,y);
t=toc;
display(['Time passed is ',num2str(t), ' seconds'])
Run Code Online (Sandbox Code Playgroud)
结果是:
时间过去了0.10237秒
那要快560倍!
当我学习使用C++扩展Python时,我实现了自己的数字化版本(使用扩展库的boost库):
import analysis # my C++ module implementing digitize
t1=time.time()
ind2=analysis.digitize(scale,y)
t2=time.time()
print 'Time passed is %2.2f seconds' %(t2-t1)
np.all(ind==ind2) #ok
Run Code Online (Sandbox Code Playgroud)
结果是:
时间过去了0.02秒
因为我的数字化版本假设输入都是单调的,所以有一点作弊,这可能解释为什么它比Matlab更快.但是,对大小为1e + 6的数组进行排序需要0.16秒(使用numpy.sort),因此与Matlab函数histc相比,我的函数性能更差(约1.6倍).
所以问题是:
我正在使用Fedora 16,我最近安装了ATLAS和LAPACK库(但性能已发生了很大变化).我是否应该重建numpy?我不确定我的numpy安装是否使用适当的库来获得最大速度,也许Matlab正在使用更好的库. …
我正在尝试将列名添加到numpy ndarray中,然后按名称选择列.但它不起作用.当我添加名称时,或者稍后当我尝试调用它们时,我无法判断问题是否发生.
这是我的代码.
data = np.genfromtxt(csv_file, delimiter=',', dtype=np.float, skip_header=1)
#Add headers
csv_names = [ s.strip('"') for s in file(csv_file,'r').readline().strip().split(',')]
data = data.astype(np.dtype( [(n, 'float64') for n in csv_names] ))
Run Code Online (Sandbox Code Playgroud)
基于维度的诊断符合我的预期:
print len(csv_names)
>> 108
print data.shape
>> (1652, 108)
Run Code Online (Sandbox Code Playgroud)
"print data.dtype.names"也返回预期的输出.
但是当我开始按字段名称调用列时,就会发生棘手的事情."列"仍然是一个包含108列的数组......
print data["EDUC"].shape
>> (1652, 108)
Run Code Online (Sandbox Code Playgroud)
...它似乎包含比数据集中的行更多的缺失值.
print np.sum(np.isnan(data["EDUC"]))
>> 27976
Run Code Online (Sandbox Code Playgroud)
知道这里出了什么问题吗?添加标题应该是一个简单的操作,但我已经打了几个小时这个bug.救命!
有谁知道Networkx中三种不同的pagerank功能之间的准确性差异?
我有一个1000个节点和139732个边缘的图形,"普通" pagerank函数似乎根本不起作用 - 除了两个节点之外都有相同的PG,所以我假设这个函数不起作用以及大型图表?
pagerank_numpy价值观似乎也比pagerank_scipy价值观更加分散.该函数的文档说"这对于小图表来说是最快和最准确的".什么是"小"图?
另外,为什么pagerank_numpy不允许max_iter和tol参数?
我用np.save()保存了几个numpy数组,并且放在一起它们非常庞大.
是否有可能将它们全部作为内存映射文件加载,然后连接并切换所有这些文件而不将任何内容加载到内存中?
它看起来像pandas.Series中的一个错误.
a = pd.Series([1,2,3,4])
b = a.reshape(2,2)
b
Run Code Online (Sandbox Code Playgroud)
b有类型Series但不能显示,最后一个语句给出异常,非常冗长,最后一行是"TypeError:%d format:需要一个数字,而不是numpy.ndarray".b.shape返回(2,2),这与其类型系列相矛盾.我猜也许pandas.Series没有实现重塑功能,我从np.array调用版本?任何人都看到这个错误?我在大熊猫0.9.1.
我试图用自定义概率密度函数拟合一些实验值的分布.显然,所得到的函数的积分应该总是等于1,但简单scipy.optimize.curve_fit(功能,dataBincenters,dataCounts)的结果从未满足该条件.解决这个问题的最佳方法是什么?
我在元组中有一组点,如下所示:
>>> s
set([(209, 147),
(220, 177),
(222, 181),
(225, 185),
(288, 173),
(211, 155),
(222, 182)])
Run Code Online (Sandbox Code Playgroud)
做这套散点图的正确方法是什么?
我正在研究矩阵的主成分分析.我已经找到了如下所示的组件矩阵
A = np.array([[-0.73465832 -0.24819766 -0.32045055]
[-0.3728976 0.58628043 -0.63433607]
[-0.72617152 0.53812819 -0.22846634]
[ 0.34042864 -0.08063226 -0.80064174]
[ 0.8804307 0.17166265 0.04381426]
[-0.66313032 0.54576874 0.37964986]
[ 0.286712 0.68305196 0.21769803]
[ 0.94651412 0.14986739 -0.06825887]
[ 0.40699665 0.73202276 -0.08462949]])
Run Code Online (Sandbox Code Playgroud)
我需要在此组件矩阵中执行varimax旋转,但无法找到旋转的确切方法和程度.大多数示例都显示在R.但是我需要python中的方法.
我有一个python代码,我必须将2D数组转换为2D矩阵,以便我可以使用它来计算逆.因为我使用numpy.matrix(数组),但它无法正常工作.任何人都可以告诉如何将2D数组转换为numpy矩阵?该数组由所有浮点数组成
是否可以在对数刻度中设置颜色条的级别,如下图所示?

以下是可以实现的示例代码:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
delta = 0.025
x = y = np.arange(0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 1e6 * (Z1* Z2)
fig=plt.figure()
ax1 = fig.add_subplot(111)
lvls = np.logspace(0,4,20)
CF = ax1.contourf(X,Y,Z,
norm = LogNorm(),
levels = lvls
)
CS = ax1.contour(X,Y,Z,
norm = LogNorm(),
colors = 'k',
levels = lvls …Run Code Online (Sandbox Code Playgroud)