Python二维条件

2024-03-28 12:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何表达条件循环。我想创建一个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,所以我不明白为什么没有循环通过。你知道吗


Tags: in元素forifnprange数字col
2条回答

您的错误在上限:

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)

你的问题

您需要遍历所有行和列:

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):

顺便说一句,在Python中,行是第一个维度,所以这样更好:

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

即使rowcol在您的案例中具有相同的值。你知道吗

更好的解决方案

使用NumPy数组时,应该尽量避免循环, 因为循环真的很慢。根据我的经验,NumPy数组上的循环甚至比Python列表上的循环还要慢。 因此,最好:

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

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

where(condition, [x, y])

Return elements, either from x or y, depending on condition.

相关问题 更多 >