numpy 如何从linspace列表中删除零?

tquggr8v  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(75)

我的清单是这样的:

np.linspace(-20,20)

字符串
我想要除了零以外的所有东西。
我试过这个:

x = list(map(int, np.linspace(-20,20)))
x.remove(0)


还有这个:

[int(x) for x in np.linspace(-20,20) if x!=0]


但都不管用。

brvekthn

brvekthn1#

IIUC,您可以尝试:

arr = np.linspace(-20, 20, dtype=int)
print(arr[arr != 0])

字符串
打印:

[-20 -20 -19 -18 -17 -16 -16 -15 -14 -13 -12 -12 -11 -10  -9  -8  -7  -7
  -6  -5  -4  -3  -3  -2  -1   1   2   2   3   4   5   6   6   7   8   9
  10  11  11  12  13  14  15  15  16  17  18  19  20]


在Python中:

arr = [i for i in range(-20, 21) if i != 0]

9nvpjoqh

9nvpjoqh2#

如果你想得到一个没有零的numpy数组,你可以这样做:

L = numpy.linspace(-20, 20)
L = L[L != 0]

字符串
L != 0创建一个布尔数组作为掩码,L[L != 0]保留掩码为True的值。
但是numpy.linspace(-20, 20)的输出中没有0。

ymzxtsji

ymzxtsji3#

np.linspace(-20,20)不会有零。

print(np.linspace(-20,20))

array([-20.        , -19.18367347, -18.36734694, -17.55102041,
       -16.73469388, -15.91836735, -15.10204082, -14.28571429,
       -13.46938776, -12.65306122, -11.83673469, -11.02040816,
       -10.20408163,  -9.3877551 ,  -8.57142857,  -7.75510204,
        -6.93877551,  -6.12244898,  -5.30612245,  -4.48979592,
        -3.67346939,  -2.85714286,  -2.04081633,  -1.2244898 ,
        -0.40816327,   0.40816327,   1.2244898 ,   2.04081633,
         2.85714286,   3.67346939,   4.48979592,   5.30612245,
         6.12244898,   6.93877551,   7.75510204,   8.57142857,
         9.3877551 ,  10.20408163,  11.02040816,  11.83673469,
        12.65306122,  13.46938776,  14.28571429,  15.10204082,
        15.91836735,  16.73469388,  17.55102041,  18.36734694,
        19.18367347,  20.        ])

字符串
如果你想要从-20到20之间的值而不需要0,你可以简单地使用列表解析:

[x for x in range(-20,20) if x!=0]


np.linspace(-20,20)返回指定间隔内的等间距数字。这些值将为50个值。
要生成的样本数。默认值为50。必须为非负数。
https://numpy.org/doc/stable/reference/generated/numpy.linspace.html

v440hwme

v440hwme4#

我将举例说明我的评论,以便给予一个更清楚的概念,了解您的remove发生了什么
做一个更小的linspace,只有10个元素(仍然是偶数,只是不是默认的50):

In [105]: x=np.linspace(-5,5,10);x
Out[105]: 
array([-5.        , -3.88888889, -2.77777778, -1.66666667, -0.55555556,
        0.55555556,  1.66666667,  2.77777778,  3.88888889,  5.        ])

字符串
由于它包括端点,偶数个元素可以给予分数间距。
将其转换为int(与list/map/int相同)

In [106]: x.astype(int)
Out[106]: array([-5, -3, -2, -1,  0,  0,  1,  2,  3,  5])


注意0。

In [107]: y=x.astype(int).tolist()    
In [108]: y.remove(0)    
In [109]: y
Out[109]: [-5, -3, -2, -1, 0, 1, 2, 3, 5]    
In [110]: y.remove(0)    
In [111]: y
Out[111]: [-5, -3, -2, -1, 1, 2, 3, 5]


我们必须调用remove两次才能删除两者。
重复,但用奇数:

In [112]: x=np.linspace(-5,5,11);x
Out[112]: array([-5., -4., -3., -2., -1.,  0.,  1.,  2.,  3.,  4.,  5.])

In [113]: x.astype(int)
Out[113]: array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5])

In [114]: y=x.astype(int).tolist()    
In [115]: y.remove(0)

In [116]: y
Out[116]: [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]


现在只有一个0了,删除就可以了。
无论这些数字是否是您真正需要的,这都解释了为什么remove没有删除(所有)零。

相关问题