我正在使用该numpy.delete
功能从多个数组中删除元素。我从这个问题开始,使这个for / if块更简单,变得更加pythonic,并在应用那里给出的答案后到达:
# Data lists.
a = [3,4,5,12,6,8,78,5,6]
b = [6,4,1.,2,8,784.,43,6.,2]
c = [8,4.,32.,6,1,7,2.,9,23]
# Maximum limit.
max_limit = 20.
# Store indexes of elements to be removed.
indexes = [i for i, t in enumerate(zip(b, c)) if any(e > max_limit for e in t)]
# Remove elements from all lists.
big_array = np.array([a, b, c])
clean_array = np.delete(big_array, indexes, axis=1)
# Final clean lists.
a_clean, b_clean, c_clean = clean_array
我遇到的问题是我的列表之一实际上是由字符串而不是浮点数组成的,如下所示:
# Data lists.
a = ['a','b','c','d','e','f','g','h','i'] # <-- strings
b = [6,4,1.,2,8,784.,43,6.,2] # <-- floats
c = [8,4.,32.,6,1,7,2.,9,23] # <-- floats
当我在上面的代码中应用该numpy.delete
行时,会将所有最终列表(a_clean, b_clean, c_clean
)中的所有元素都转换为字符串,而不是仅将第一个保留为字符串,其余保留为浮点数。
如果无法解决,如何防止这种情况发生或解决?
如果要使用numpy,最好将列表转换为数组。它看起来像:
a = np.array(a)
b = np.array(b)
c = np.array(c)
mask = (b > max_limit) | (c > max_limit)
a = a[mask]
b = b[mask]
c = c[mask]
>>> a
array(['c', 'f', 'g', 'i'],
dtype='|S1')
>>> b
array([ 1., 784., 43., 2.])
>>> c
array([ 32., 7., 2., 23.])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句