草庐IT

python:在给定维度索引的情况下提取多维数组的一片

我知道如何取x[:,:,:,:,j,:](它取4维的第j个切片)。如果尺寸在运行时已知,并且不是已知常量,是否有办法做同样的事情? 最佳答案 这样做的一个选择是以编程方式构建切片:slicing=(slice(None),)*4+(j,)+(slice(None),)另一种方法是使用numpy.take()或ndarray.take():>>>a=numpy.array([[1,2],[3,4]])>>>a.take((1,),axis=0)array([[3,4]])>>>a.take((1,),axis=1)array([[2]

python - 创建多维零点 Python

我需要制作一个由零组成的多维数组。对于两个(D=2)或三个(D=3)维度,这很简单,我会使用:a=numpy.zeros(shape=(n,n))或a=numpy.zeros(shape=(n,n,n))对于更高的D,如何制作长度为n的数组? 最佳答案 您可以将元组(n,)乘以您想要的维数。例如:>>>importnumpyasnp>>>N=2>>>np.zeros((N,)*1)array([0.,0.])>>>np.zeros((N,)*2)array([[0.,0.],[0.,0.]])>>>np.zeros((N,)*3)a

python - Cython:将单个元素分配给多维内存 View 切片

每当我将单个值分配给多维内存View的切片时,Cython似乎使用了错误的步幅,除非切片沿着第一维。我在下面给出一个完整的例子:#bug.pyimportnumpyasnpdefbug():#cdefint[:,::1]aa=2*np.ones((2,2),dtype=np.intc)a[:,:1]=1print(np.asarray(a))如果我们在Python中运行它(例如python3-c'importbug;bug.bug()'),我们得到[[12][12]]如预期的那样打印出来。我现在通过将文件重命名为bug.pyx用Cython编译它,将以下内容保存在同一目录的Makefi

python - 如何在python中绘制多维数据点

先介绍一些背景:我想绘制各种歌曲的梅尔频率倒谱系数图并进行比较。我计算了整首歌曲的MFCC,然后对它们进行平均以获得一个包含13个系数的数组。我希望它代表我绘制的图表上的一个点。我是Python的新手,对任何形式的绘图都很陌生(尽管我看到了一些使用matplotlib的建议)。我希望能够可视化这些数据。关于我如何去做这件事有什么想法吗? 最佳答案 首先,如果您想将13个系数的数组表示为图形中的一个点,那么您需要将13个系数分解为图形中的维数,正如yankingyin在他的评论中指出的那样。要将数据投影到2个维度,您可以自己创建相关指

python - Numpy 多维数组索引交换轴顺序

我正在处理多维Numpy数组。当使用其他索引数组访问这些数组时,我注意到一些不一致的行为。例如:importnumpyasnpstart=np.zeros((7,5,3))a=start[:,:,np.arange(2)]b=start[0,:,np.arange(2)]c=start[0,:,:2]print'a:',a.shapeprint'b:',b.shapeprint'c:',c.shape在这个例子中,我得到了结果:a:(7,5,2)b:(2,5)c:(5,2)这让我很困惑。为什么“b”和“c”的尺寸不同?为什么“b”交换轴顺序,而不是“a”?由于大量的单元测试,我已经能够

python - 多维数组行列式

我正在尝试计算一个numpy数组M的行列式,其中np.shape(M)=(N,L,L)类似于:importnumpyasnpM=np.random.rand(1000*10*10).reshape(1000,10,10)dm=np.zeros(1000)for_inxrange(len(dm)):dm[_]=np.linalg.det(M[_])有没有不循环的方法?“N”比“L”大几个数量级。我想到了类似的东西:np.apply_over_axes(np.linalg.det(M),axis=0)有没有更快的方法做我想做的事?我猜循环开销是一个性能瓶颈,因为小矩阵的行列式是一个相对便宜

Python如何使用字符串键索引多维数组,如字典

我想结合numpy的array和原生python的dict的功能,即创建一个可以用字符串索引的多维数组。例如,我可以这样做:dict_2d={'a':{'x':1,'y':2},'b':{'x':3,'y':4}}printdict_2d['a','y']#returns2我知道我可以做dict_2d['a']['x']但从长远来看,我希望能够像对待numpy数组一样对待它们,包括做矩阵乘法等等分层字典不可能。编写一个简单版本的类也不难,我只是使用该类将所有字符串转换为int索引,然后使用numpy,但如果可能,我想使用已经存在的东西。编辑:我不需要令人难以置信的性能。我可能会使用10

python - 在python中将平面列表读入多维数组/矩阵

我有一个数字列表,表示另一个程序生成的矩阵或数组的扁平化输出,我知道原始数组的维度,想将这些数字读回到列表列表或NumPy矩阵中。原始数组中可能有超过2个维度。例如data=[0,2,7,6,3,1,4,5]shape=(2,4)printsome_func(data,shape)会产生:[[0,2,7,6],[3,1,4,5]]提前干杯 最佳答案 使用numpy.reshape:>>>importnumpyasnp>>>data=np.array([0,2,7,6,3,1,4,5])>>>shape=(2,4)>>>data.re

Python多维稀疏数组

我正在从事一个需要处理3维大型数组的项目。我使用的是numpy3d数组,但我的大部分条目都将为零,因此会浪费大量内存。Scipysparse似乎只允许二维矩阵。还有其他方法可以存储3D稀疏数组吗? 最佳答案 scipy.sparse有多种格式,但只有几种格式具有一组高效的数字运算。不幸的是,这些是更难扩展的。dok使用索引元组作为字典键。所以这很容易从2d推广到3d或更多。coo有row、col、data属性数组。那么从概念上讲,添加第三个depth(?)很容易。lil可能需要列表中的列表,这可能会变得困惑。但是csr和csc将数组

python - 如何对包含 NaN 的大型多维数组中的每个像素应用线性回归?

我有一个独立变量值的一维数组(x_array),它与具有多个时间步长的3Dnumpy空间数据数组(y_array)中的时间步长相匹配。我的实际数据要大得多:300多个时间步长和高达3000*3000像素:importnumpyasnpfromscipy.statsimportlinregress#Independentvariable:fourtime-stepsof1-dimensionaldatax_array=np.array([0.5,0.2,0.4,0.4])#Dependentvariable:fourtime-stepsof3x3spatialdatay_array=np