我正在尝试用Cython来加速我的Python代码,到目前为止,它工作得很好。然而,我有一个问题:处理列表。
使用cython -a myscript.pyx,我可以看到,在处理列表时,我的代码中只有一部分调用Python例程。
例如,我有一个numpy数组(sel1),需要像这样拆分:
x1 = numpy.array([t[0] for t in sel1])
y1 = numpy.array([t[1] for t in sel1])
z1 = numpy.array([t[2] for t in sel1])
我不知道如何用Cython来加速这个过程。
另一种情况是在使用列表/数组索引
我一直被告知python的本机追加是一个缓慢的函数,应该在for循环中避免。然而,经过几次小测试之后,我发现在使用for循环迭代它时,它的性能比numpy数组要差得多:
第一次测试数组/列表构造
附加python本机列表
def pythonAppend(n):
x = []
for i in range(n):
x.append(i)
return x
%timeit pythonAppend(1000000)
Numpy分配数组然后访问
def numpyConstruct(n):
x = np.zeros(n)
在这个问题的末尾看到了重要的澄清.
我正在使用numpy来加速一些经纬度坐标的处理。不幸的是,我的numpy“优化”使我的代码运行速度比不使用numpy的代码慢5倍。
瓶颈似乎在于用我的数据填充numpy数组,然后在完成数学转换之后提取出这些数据。为了填充数组,我基本上有一个循环,类似于:
point_list = GetMyPoints() # returns a long list of ( lon, lat ) coordinate pairs
n = len( point_list )
point_buffer = numpy.empty( ( n, 2 ), numpy.float3
我有一个一维numpy数组(array_)和一个Python列表(list_)。
下面的代码可以工作,但效率很低,因为切片涉及不必要的复制(当然对于Python列表,我相信也适用于numpy数组?):
result = sum(array_[1:])
result = sum(list_[1:])
重写它的好方法是什么?
对于numpy ndarray,没有append和insert,就像原生python列表一样。
a = np.array([1, 2, 3])
a.append(5) # this does not work
a = np.append(a, 5) # this is the only way
而对于本地python列表,
a = [1, 2, 3]
a.append(4) # this modifies a
a # [1, 2, 3, 4]
为什么numpy ndarray被设计成这样?我正在写ndarray的一个子类,有没有办法像原生python数组一样实现"append“
我是个编程新手,在如何替换python列表中的字符串时遇到了麻烦。
# I have
a = [ 200, "NaN", 230 , 300]
# I want
a = [200, np.nan, 230, 300]
在列表a中查找并替换该字符串。
使用python和numpy:
是否可以使用for循环将"NaN"更改为np.nan?
尝试使用函数进行计算时出现错误:
can't multiply sequence by non-int of type 'float'
具体地说:
如何将numpy.ndarray作为函数提供输出数据类型和
如何使用cimport numpy而不是import numpy来创建一个没有Python开销的数组?
如果从行numpy.ndarray中删除cdef numpy.ndarray array(int start, int end):,下面的代码就能工作。根据注释,它仍然有大量的Python开销(不包括range(start, end)初始化C++向量)。
%%cython -a
# distutils: language = c++
import numpy
from libcpp.vector cim
问题是
如何将数据从N x N x N x... h5py数据集复制到1D标准Python列表,而不对数据进行中间复制?
我可以想出几种不同的方法来用中间拷贝来完成这个任务。例如:
import h5py
import numpy as np
# initialize list, put some initial data in it
myList = ['foo']
# open up an h5py dataset from a file on disk
myFile = h5py.File('/path-to-my-data', 'r'
我正在为学校做一项作业,我应该给集成函数的python实现和numpy实现计时。我通常期望numpy比python实现执行得更好,但事实并非如此。与numpy数组相比,我在python中使用列表理解的速度大约是4倍。从N=1000到N=100 000都是如此。我没有测试任何更高的东西,因为N=100 000是我需要达到的位置,才能在我的估计中获得可接受的误差。
常规python代码:
f is the function being integrated, a and b are limits and N is number of points to integrate over
def in
当输入是int的列表时,为什么numpy.sum和numpy.prod函数返回int32;如果输入是同一个列表的生成器,则返回int64?在列表上操作时,强迫他们使用int64的最好方法是什么?
例如。
sum([x for x in range(800000)]) == -2122947200
sum((x for x in range(800000))) == 319999600000L
Python 2.7
我试图为几个csv文件中的一列绘制箱线图(当然没有标题行),但在元组、列表和数组方面遇到了一些混乱。这是我到目前为止所掌握的
#!/usr/bin/env python
import csv
from numpy import *
import pylab as p
import matplotlib
#open one file, until boxplot-ing works
f = csv.reader (open('2-node.csv'))
#get all the columns in the fi
我想存储多维数组,它存储类似python的内容。目前,它看起来像是:
a = [[{'col':i,'row':j} for i in range(9)] for j in range(9)]
我知道,numpy是完美的,如果你想做数学,比如处理矩阵。我想快点做的事:
多维索引访问
使用多维索引更改值
我不知道如何处理普通的Python列表。因为就像
idx = [2,3]
print(a[idx])
根本不存在,对吧?它应该打印出{'row':2,'col':3}
谢谢您的想法,如果numpy是更好的选择:如何
Ubuntu14.04.01LTS上的Python3.4.0 默认情况下。我们可以在终点站‘`python3 3上输入。
我想为Python3.4.0使用Numpy。我运行import numpy but I had anImportError.,所以我通过运行sudo适合-获取安装python3`. Then I typed on Terminal:python 3‘。那就进口numpy。我发现了一个错误:
>>> import numpy
Traceback (most recent call last):
File "<stdin>",
我有一个函数,它可以接受list或numpy数组。
在这两种情况下,列表/数组都只有一个元素(总是这样)。我只需要归还一个花车。
因此,例如,我可以收到:
list_ = [4]
或者numpy数组:
array_ = array([4])
我该回去了
4.0
所以,自然地(我要说),我使用浮子(.)在list_和get:
TypeError: float() argument must be a string or a number
我对array_也做了同样的操作,这一次它通过响应"4.0“来工作。从这里,我了解到Python的列表不能以这种方式转换为浮动。
基于numpy数组浮
我试图将astropy Angles的对象实例添加到NumPy数组中,并得到一个错误:
ValueError: setting an array element with a sequence.
Angle对象看起来如下所示:
<Angle 1.2557346257567 deg>
如果我把它们放到一个普通的Python列表中,那么我得到:
s = [<Angle 1.2562500714928306 deg>,
<Angle 1.2562500714928306 deg>,
<Angle 1.2562500714928306 de