Python二维条件

时间:2018-01-04 19:43:40

标签: python python-2.7 numpy

我不确定如何表达条件循环。我想创建一个NxN数组,该数组由等于1或-1的元素组成。我已经开始创建一个3x3数组,打印时由0到1之间的数字组成。

col = 3
row = 3

mymatrix = np.random.rand(col,row)

我想将它们的值设置为1或-1,具体取决于它们分配的值是否大于或等于0.5。

for i in range(0,2): 
    for j in range(0,2):
        if mymatrix[i,j] <= 0.5:
            mymatrix[i,j] = -1.0
        elif mymatrix[i,j] >= 0.5:
            mymatrix[i,j] = 1.0

print mymatrix

出于某种原因,这会打印一个3x3矩阵,只有内部4个元素为1或-1。

[[-1, 1,0.19343979] 
 [ 1, -1, 0.59891168]  
 [ 0.02766664, 0.73244162, 0.41541223]]

我知道mymatrix[2,2]是0.41541223,所以我无法理解为什么这不是循环的。

2 个答案:

答案 0 :(得分:4)

您的问题

您需要遍历所有行和列:

for i in range(row): 
    for j in range(col):

你只绕过前两个:

col = 3
row = 3

在Python range(start, end)中,我们提供的范围从start开始,包含end独占。

for i in range(0,2): 
    for j in range(0,2):

BTW,在Python行中是第一个维度,所以这会更好:

mymatrix = np.random.rand(row, col)

尽管rowcol在您的情况下具有相同的值。

更好的解决方案

使用NumPy数组时,应尽可能避免循环, 因为循环可能非常慢。根据我的经验,NumPy数组上的循环甚至比Python列表上的循环更慢。 因此,做得更好:

np.where(mymatrix <= 0.5, -1, 1)

这是一个更快的矢量化版本。 使用NumPy的目标之一通常是速度。

  

where(condition, [x, y])

     

xy返回元素,具体取决于condition

答案 1 :(得分:1)

您的错误位于上限:

mymatrix = np.random.rand(col,row)

for i in range(0,3): 
    for j in range(0,3):
        if mymatrix[i,j] <= 0.5:
            mymatrix[i,j] = -1.0
        elif mymatrix[i,j] >= 0.5:
            mymatrix[i,j] = 1.0

print (mymatrix)