Python 如何将数组转换为0或1个元素?
我想要的是将每个无0数字的值更改为1 我能做的是:Python 如何将数组转换为0或1个元素?,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我想要的是将每个无0数字的值更改为1 我能做的是: [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 1 1 1 0 0 0 0 0 1 1 0 0 3 3 0 0 0 4 4 0 0 0 5 5 5 5 0 0 2 2 2 2 2 0 2 2 2 2 2 0 0 0 6 6 6 6 6 6 0 6 6 6 6]
[0 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 6 6 6 6 6 6 6 6 6 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 0 0 5 5 5 0 2 2 0 0 2 2 0 0 0 2 2 0 0 6 6 0 0 6 6 6 0 0 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 5 0 0 0 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
[1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
[0 1 1 0 0 0 0 0 0 7 0 0 0 3 3 0 0 0 4 4 0 0 0 0 5 5 5 5 5 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]]
在numpy中如何执行此操作?给定一个numpy数组
a
:
for element in list:
for sub_element in element:
if sub_element != 0:
sub_element = 1
为了提高效率,在大多数用例中,您可以将数组保持为布尔值,而忽略整数转换
这是因为
0
是唯一被认为是False
的整数;所有其他的都是正确的
。将布尔数组转换为int
是False
到0
和True
到1
的简单映射,如果您的numpy数组名为a
,则可以使用如下内容:
res = A.astype(bool).astype(int)
证明:
a[a!=0.0] = 1
这是因为a!=0.0
将返回带有True
/False
值的数组
满足条件,然后仅对这些条件执行赋值
存在True
的元素:
>>> a = numpy.array([0.0, 1.0, 2.0, 3.0, 0.0, 10.0])
>>> a
array([ 0., 1., 2., 3., 0., 10.])
>>> a[a!=0.0] = 1
>>> a
array([ 0., 1., 1., 1., 0., 1.])
另外,这也适用于任何其他条件。
a[a!=0]=1
?我用np.unique(a)
进行了检查,似乎是正确的,因为0和1是唯一的值,请编辑答案来解释这一行是如何工作的,因为我不明白,谢谢。@Nelly,当然,我添加了一个解释。@RoadRunner,我不会走那么远的。在很多情况下,我认为布尔数组被严重低估了,大多数时候你不需要astype(int)
部分;的确,NumPy可能需要一个字节来存储布尔值,但当您开始以其他格式(例如HDF5)存储大型数组时,它起到了一定的作用。
>>> a != 0
array([False, True, True, True, False, True], dtype=bool)