Python 如何将数组转换为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数字的值更改为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 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)