我需要找到数组的零元素和非零元素的索引。换句话说,我想从numpy.nonzero()中找到互补索引。我知道的方法如下:indices_zero=numpy.nonzero(array==0)indices_nonzero=numpy.nonzero(array!=0)然而,这意味着搜索数组两次,这对于大型数组来说效率不高。是否有使用numpy执行此操作的有效方法? 最佳答案 假设你已经有了numpy.arange(len(array))的使用范围,只需获取并存储逻辑索引:bindices_zero=(array==0)然后当你真正
是否可以在不遍历数组或屏蔽数组的情况下获取numpy数组中非零元素的长度。速度是计算长度的主要目标。本质上,类似于len(array).where(array!=0)。如果它改变了答案,每一行都将从零开始。该数组在对角线上用零填充。 最佳答案 假设您指的是非零元素的总数(而不是非零行的总数):In[12]:a=np.random.randint(0,3,size=(100,100))In[13]:timeitlen(a.nonzero()[0])1000loops,bestof3:306usperloopIn[14]:timeit(
给定一个numpy数组(为简单起见,让它成为一个位数组),我如何构造一个相同形状的新数组,其中1恰好位于原始数组中有一个零的位置,前面至少有一个N-1个连续零?例如,实现具有两个参数的函数nzeros的最佳方法是什么,一个numpy数组和所需的最少连续零数:importnumpyasnpa=np.array([0,0,0,0,1,0,0,0,1,1])b=nzeros(a,3)函数nzeros(a,3)应该返回array([0,0,1,1,0,0,0,1,0,0]) 最佳答案 方法#1我们可以使用1Dconvolution-defn
我需要计算numpy数组中零元素的数量。我知道numpy.count_nonzero功能,但似乎没有用于计算零元素的类比。我的数组不是很大(通常少于1E5个元素),但操作执行了几百万次。当然我可以使用len(arr)-np.count_nonzero(arr),但我想知道是否有更有效的方法。这是我目前如何做的MWE:importnumpyasnpimporttimeitarrs=[]for_inrange(1000):arrs.append(np.random.randint(-5,5,10000))deffunc1():forarrinarrs:zero_els=len(arr)-n
我有一个排名第一的numpy.array我想制作一个箱线图。但是,我想排除数组中所有等于零的值。目前,我通过循环数组来解决这个问题,如果不等于零,则将值复制到一个新数组中。但是,由于数组包含86000000个值,而且我必须多次这样做,这需要很大的耐心。有没有更智能的方法来做到这一点? 最佳答案 对于NumPy数组a,可以使用a[a!=0]提取不等于零的值。 关于python-如何从NumPy数组中删除所有零元素?,我们在StackOverflow上找到一个类似的问题:
我有一个总是只包含1和0的列表。我需要获取列表的非零索引列表:a=[0,1,0,1,0,0,0,0]b=[]foriinrange(len(a)):ifa[i]==1:b.append(i)printb实现这一目标的“pythonic”方式是什么? 最佳答案 [ifori,einenumerate(a)ife!=0] 关于list-如何获取列表中非零元素的索引列表?,我们在StackOverflow上找到一个类似的问题: https://stackoverfl
我有一个相对稀疏的数组,我想遍历每一行并只打乱非零元素。示例输入:[2,3,1,0][0,0,2,1]示例输出:[2,1,3,0][0,0,1,2]注意零点如何没有改变位置。要打乱每行中的所有元素(包括零),我可以这样做:foriinrange(len(X)):np.random.shuffle(X[i,:])然后我尝试做的是:foriinrange(len(X)):np.random.shuffle(X[i,np.nonzero(X[i,:])])但它没有效果。我注意到X[i,np.nonzero(X[i,:])]的返回类型与X[i,:]不同,这可能成为原因。In[30]:X[i,n
根据JLS,int数组应在初始化后用零填充。但是,我面临的情况并非如此。这种行为首先出现在JDK7u4中,并且也出现在所有以后的更新中(我使用64位实现)。以下代码抛出异常:publicstaticvoidmain(String[]args){int[]a;intn=0;for(inti=0;i异常发生在JVM执行代码块的编译之后,并且不带有-Xint标志。此外,Arrays.fill(...)语句(与此代码中的所有其他语句一样)是必需的,如果不存在,则不会发生异常。很明显,这个可能的错误与一些JVM优化有关。对于这种行为的原因有什么想法吗?更新:我在HotSpot64位服务器VM、G