草庐IT

python - 为什么 numpy.median 规模如此之大?

我最近在面试时遇到的一个问题是:Writeadatastructurethatsupportstwooperations.1.Addinganumbertothestructure.2.Calculatingthemedian.Theoperationstoaddanumberandcalculatethemedianmusthaveaminimumtimecomplexity.我的实现非常简单,基本上保持元素排序,这样添加一个元素的成本是O(log(n))而不是O(1),但中位数是O(1)而不是O(n*log(n))我还添加了一个简单的实现,但包含numpy数组中的元素:import

python - 使用 numpy.take 进行更快的花式索引

编辑我保留了下面面临的更复杂的问题,但我的问题是np.take可以更好地总结如下。假设你有一个数组img形状(planes,rows),和另一个数组lut形状(planes,256),并且您想使用它们创建一个新数组out形状(planes,rows),其中out[p,j]=lut[p,img[p,j]].这可以通过如下花式索引来实现:In[4]:%timeitlut[np.arange(planes).reshape(-1,1),img]1000loops,bestof3:471usperloop但是,如果您不使用花哨的索引,而是在planes上使用take和python循环事情可以大

python - 使用 reshape() 时 numpy 何时复制数组

在numpy.reshape的文档中,它说:Thiswillbeanewviewobjectifpossible;otherwise,itwillbeacopy.Notethereisnoguaranteeofthememorylayout(C-orFortran-contiguous)ofthereturnedarray.我的问题是,numpy什么时候会选择返回一个新View,什么时候复制整个数组?关于reshape的行为,是否有任何一般原则告诉人们,或者它只是不可预测的?谢谢。 最佳答案 @mgillson找到的链接似乎解决了“

python - 'numpy.float64' 对象不可迭代

我正在尝试迭代由numpy.linspace生成的值数组:slX=numpy.linspace(obsvX,flightX,numSPts)slY=np.linspace(obsvY,flightY,numSPts)forindex,pointinslX:yPoint=slY[index]arcpy.AddMessage(yPoint)这段代码在我办公室的电脑上运行良好,但今天早上我坐下来在家里用另一台机器工作,出现了这个错误:File"C:\temp\gssm_arcpy.1.0.3.py",line147,inAnalyzeSightLineforindex,pointinslX:

python - 如何通过在 numpy 中广播来防止添加两个数组?

Numpy有一个非常强大的广播机制。它甚至可以在没有任何警告的情况下添加1x2和2x1数组。我不喜欢这样的行为:这种添加有99%的可能性是我的错误造成的,我希望抛出异常。问题:是否有类似的东西:numpy.safe_add(A,B)只有当A和B具有完全相同的形状时才有效? 最佳答案 您可以定义一个ndarray的子类来检查计算后结果的形状。执行计算,我们检查结果的形状,如果它与操作数的形状不同,则抛出异常:importnumpyasnpclassNoBCArray(np.ndarray):def__new__(cls,input_a

python - 如何在不增加尺寸的情况下为张量应用外积?

我有两个向量v和w我想用它们制作一个矩阵m这样:m[i,j]=v[i]*w[j]换句话说,我想计算它们的外积。我可以通过使用theano.tensor.outer或向v和v添加新索引并使用dot产品。m=T.dot(v[:,numpy.newaxis],w[numpy.newaxis,:])现在,我尝试解决一个更一般的问题。我有两个矩阵(我再次称它们为v和w),而不是两个向量v和w想计算矩阵v的每一行与矩阵w的对应行的外积(第一个矩阵中的第i_th行应乘以矩阵的第i_th行第二个矩阵)。所以,我想做这样的事情:m1=T.tensordot(v[:,:,numpy.newaxis],w[

python - Voronoi - 计算每个区域的确切边界

我正在尝试使用scipy.spatial.Voronoi计算Voronoi图每个区域的确切边界,前提是所有点都在预定义的多边形内。例如,使用此documentation中的示例.如果我需要计算具有相同点但位于具有以下边界的矩形内的Voroni怎么办global_boundaries=np.array([[-2,-2],[4,-2],[4,4],[-2,4],[-2,-2]])我需要像那样计算每个Voronoi区域的精确边界吗?voronoi_region_1_boundaries=[[-2,-2],[0.5,-2],[0.5,0.5],[-2,0-5],[-2,-2]]voronoi_

python - 为什么 "None in numpy.asarray(...)"会导致 future 的警告

当你做这样的事情时,future的警告会发生:>>>numpy.asarray([1,2,3,None])==None目前返回False,但我知道在Numpy的future版本中将返回一个包含[False,False,False,True]的数组。讨论onthenumpydiscussionlist解决这个问题的方法是测试aisNone。让我感到困惑的是in关键字与一维数组相比列表的这种行为:>>>Nonein[1,2,3,None]True>>>Noneinnumpy.asarray([1,2,3,None])__main__:1:FutureWarning:comparisonto

python - Numpy:将矩阵与 3d 张量相乘——建议

我有一个形状为MxN的矩阵P和一个形状为KxNxR的3d张量T。我想将P与T中的每个NxR矩阵相乘,得到KxMxR3d张量。P.dot(T).transpose(1,0,2)给出了想要的结果。这个问题有没有更好的解决方案(即摆脱transpose)?这一定是一个很常见的操作,所以我认为,其他人已经找到了不同的方法,例如使用tensordot(我试过但没能得到想要的结果)。意见/观点将不胜感激! 最佳答案 scipy.tensordot(P,T,axes=[1,1]).swapaxes(0,1)

python - 有什么优雅的方法可以用 dtype 数组的列定义数据框吗?

我想在pandas中处理二级库存数据。为简单起见,假设每行有四种数据:毫秒:时间戳,int64last_price:最后成交价,float64,ask_queue:askside的volume,一个固定大小(200)的int32数组bid_queue:出价方成交量,一个固定大小(200)的int32数组这可以很容易地定义为numpy中的结构化数据类型:dtype=np.dtype([('millis','int64'),('last_price','float64'),('ask_queue',('int32',200)),('bid_queue',('int32',200))])通过