2 回答
TA贡献1155条经验 获得超0个赞
波浪号操作是 numpy 的一部分,是 numpy.invert 的快捷方式。
通过使用列表理解,是一个Python列表,它不支持此操作。flag_good
例如,您可以将列表转换为 Numpy 数组,然后使用 invert 函数。flag_good
>>> flag_bad = ~np.array(flag_good)
>>> flag_bad
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, True, False, True, False, False, False, False, False,
True, False, False, False, False, False])
或者,您可以使用矢量化并直接返回Numpy数组,其中函数按元素调用,而不是使用列表推导。
>>> flag_good = np.vectorize(lambda x: x.isdigit())(arr2)
>>> flag_bad = ~flag_good
>>> flag_bad
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, True, False, True, False, False, False, False, False,
True, False, False, False, False, False])
TA贡献1877条经验 获得超6个赞
我觉得你可以从一开始就解决问题,编辑你的列表理解。
flag_bad = [not(element.isdigit()) for element in arr2]
不过,为了回答你的问题,我会这样做:
import numpy as np
input_list = [1,2,3,1,5,2,3,4,2,
4,1,3,4,1,2,5,3,2,
1,"?",1,"n",3,2,5,
1,2,"Nan",3,2,2,4,3]
# calculate the median
median = int(np.median([elt for elt in input_list if type(elt) is int]))
# replace elements of the list only if you have a non-int
output_array = np.array([elt if type(elt) is int else median for elt in input_list])
print(output_array)
输出:
[1 2 3 1 5 2 3 4 2 4 1 3 4 1 2 5 3 2 1 2 1 2 3 2 5 1 2 2 3 2 2 4 3]
添加回答
举报