编辑Python二维数组而没有for循环?

时间:2018-07-24 06:57:07

标签: python numpy for-loop

所以,我有一个给定的二维矩阵,它是随机生成的:

a = np.random.randn(4,4)

给出输出:

array([[-0.11449491, -2.7777728 , -0.19784241,  1.8277976 ],
   [-0.68511473,  0.40855461,  0.06003551, -0.8779363 ],
   [-0.55650378, -0.16377137,  0.10348714, -0.53449633],
   [ 0.48248298, -1.12199767,  0.3541335 ,  0.48729845]])

我想将所有负值都更改为0,并将所有正值都更改为1。 没有for循环怎么办?

2 个答案:

答案 0 :(得分:1)

(a<0).astype(int)

这是一个可能的解决方案-根据您的条件将数组转换为布尔数组,然后将其从布尔值转换为整数。

array([[ 0.63694991, -0.02785534,  0.07505496,  1.04719295],
   [-0.63054947, -0.26718763,  0.34228736,  0.16134474],
   [ 1.02107383, -0.49594998, -0.11044738,  0.64459594],
   [ 0.41280766,  0.668819  , -1.0636972 , -0.14684328]])

结果-

(a<0).astype(int)
>>> array([[0, 1, 0, 0],
          [1, 1, 0, 0],
          [0, 1, 1, 0],
          [0, 0, 1, 1]])

答案 1 :(得分:1)

您可以使用np.where()

import numpy as np

a = np.random.randn(4,4)
a = np.where(a<0, 0, 1)

print(a)

[[1 1 0 1]
 [1 0 1 0]
 [1 1 0 0]
 [0 1 1 0]]