草庐IT

python - NumPy 性能 : uint8 vs. float 和乘法与除法?

我刚刚注意到,仅将乘法改为除法,我的脚本的执行时间几乎减半。为了调查这个,我写了一个小例子:importnumpyasnpimporttimeit#uint8arrayarr1=np.random.randint(0,high=256,size=(100,100),dtype=np.uint8)#float32arrayarr2=np.random.rand(100,100).astype(np.float32)arr2*=255.0defarrmult(a):"""mult,read-writeiterator"""b=a.copy()foriteminnp.nditer(b,op_

python - 访问 numpy 数组的相邻单元格

如何高效地访问和修改2Dnumpy数组周围的8个单元格?我有一个像这样的2Dnumpy数组:arr=np.random.rand(720,1440)对于每个网格单元格,我想减少中心单元格的10%,周围的8个单元格(角单元格更少),但前提是周围的单元格值超过0.25。我怀疑唯一的方法是使用for循环,但想看看是否有更好/更快的解决方案。--编辑:基于循环的解决方案:arr=np.random.rand(720,1440)for(x,y),valueinnp.ndenumerate(arr):#Find10%ofcurrentcellreduce_by=value*0.1#Reduceth

python - 在 Python 的 numpy/scipy 中计算数组中唯一元素的有效方法

我有一个scipy数组,例如a=array([[0,0,1],[1,1,1],[1,1,1],[1,0,1]])我想计算数组中每个唯一元素出现的次数。例如,对于上面的数组a,我想找出[0,0,1]出现1次,[1,1,1]出现2次,[1,0,1]出现1次。我想到的一种方法是:fromcollectionsimportdefaultdictd=defaultdict(int)foreltina:d[elt]+=1有没有更好/更有效的方法?谢谢。 最佳答案 如果坚持使用Python2.7(或3.1)不是问题,并且您可以使用这两个Pytho

python - Numpy/Scipy 中的卷积计算

分析我正在做的一些计算工作表明,我的程序中的一个瓶颈是基本上完成此操作的函数(np是numpy,sp是scipy):defmix1(signal1,signal2):spec1=np.fft.fft(signal1,axis=1)spec2=np.fft.fft(signal2,axis=1)returnnp.fft.ifft(spec1*spec2,axis=1)两个信号的形状都是(C,N),其中C是数据集的数量(通常小于20),N是每组中的样本数(大约5000)。每个集合(行)的计算完全独立于任何其他集合。我认为这只是一个简单的卷积,所以我尝试将其替换为:defmix2(signa

python - 如何将字符串类型的 numpy 数组传递给 Cython 中的函数

传递dtypenp.float64_t的numpy数组工作正常(如下),但我不能传递字符串数组。这是有效的:#cython_testing.pyximportnumpyasnpcimportnumpyasnpctypedefnp.float64_tdtype_tcdeffunc1(np.ndarray[dtype_t,ndim=2]A):printAdeftesting():chunk=np.array([[94.,3.],[44.,4.]],dtype=np.float64)func1(chunk)但我做不到:我找不到numpy字符串数据类型的匹配“类型标识符”。#cython_te

python - 用 numpy 的 eigh 和 svd 计算的特征向量不匹配

考虑奇异值分解M=USV*。然后M*M的特征值分解得到M*M=V(S*S)V*=VS*U*USV*。我希望通过显示eigh函数返回的特征向量与svd函数返回的特征向量相同来验证与numpy的相等性:importnumpyasnpnp.random.seed(42)#createmeancentereddataA=np.random.randn(50,20)M=A-np.array(A.mean(0),ndmin=2)#svdU1,S1,V1=np.linalg.svd(M)S1=np.square(S1)V1=V1.T#eigS2,V2=np.linalg.eigh(np.dot(M.

python - cpython vs cython vs numpy 数组性能

我正在对来自http://docs.cython.org/src/tutorial/numpy.html的素数生成器的变体进行一些性能测试.以下性能指标是kmax=1000纯Python实现,在CPython中运行:0.15s纯Python实现,在Cython中运行:0.07sdefprimes(kmax):p=[]k=0n=2whilek纯Python+Numpy实现,CPython运行:1.25simportnumpydefprimes(kmax):p=numpy.empty(kmax,dtype=int)k=0n=2whilek使用int*的Cython实现:0.003sfrom

python - python 中的 numpy var() 和 statistics variance() 有什么区别?

我正在尝试一个Dataquest练习,我发现我得到的方差对于两个包是不同的。例如[1,2,3,4]fromstatisticsimportvarianceimportnumpyasnpprint(np.var([1,2,3,4]))print(variance([1,2,3,4]))//1.25//1.6666666666666667练习的预期答案是用np.var()计算的编辑我猜它必须这样做,后者是样本方差而不是方差。谁能解释一下区别? 最佳答案 使用这个print(np.var([1,2,3,4],ddof=1))1.66666

python - 我可以查看指定索引处的 numpy 数组吗? (来自 "fancy indexing"的 View )

我需要的是一种获得“精美索引”(y=x[[0,5,21]])以返回View而不是副本的方法。我有一个数组,但我希望能够使用这个数组的一个子集(由索引列表指定),这样这个子集的变化也被放在大数组中的正确位置大批。如果我只想对前10个元素做一些事情,我可以只使用常规切片y=x[0:10]。这很好用,因为常规切片会返回一个View。问题是如果我不想要0:10,而是任意一组索引。有办法吗? 最佳答案 我认为没有办法解决这个问题。我的理解是“花式索引”总是会返回一个副本。我能想到的最佳解决方案是操作y,然后使用相同的奇特索引更改x的值:ii=

python - NumPy 的 : Check array for string data type

如何确定Numpy数组是否包含字符串?数组a在a=np.array('hiworld')具有数据类型dtype('|S8'),其中8指的是字符串中的字符数。我不明白正则表达式(例如re.match('\|S\d+',a.dtype))在这里如何工作,因为数据类型不仅仅是'|S8'. 最佳答案 a.dtype.char=='S'或a.dtype.typeisnp.string_参见NumPydocs,Datatypeobjects,Attributes. 关于python-NumPy的:C