【问题标题】:Checking each of element in 2D matrix检查二维矩阵中的每个元素
【发布时间】:2019-05-29 17:16:35
【问题描述】:

我在numpy 中有100x100 matrix,它由0's1's 组成。我还有一个canvas,由排列成100x100 的正方形组成。这个canvasmatrix 相对应(第一个正方形是element[0,0],第二个是[1,0]...,它从左到右逐行排列)。我必须检查matrix 中的每个元素,如果是0,则正方形必须是white,如果是1,则正方形必须是black。我尝试了一些方法,但没有一个有效。如何检查矩阵的每个元素,以便确定颜色是黑色还是白色?

a=0
b=0
m=np.loadtxt("C:\\Users\\DELL\\Desktop\\preklopenie_obrazka.txt", 
skiprows=1 )
for n in range(0,99):
    if m[a][b]==0.0:
        f='white'
    else:
        f='black'
    a+=1
    b+=1

【问题讨论】:

  • 你应该使用两个循环来访问二维矩阵中的所有元素

标签: python python-3.x numpy matrix


【解决方案1】:

你不需要循环

# create the canvas as a copy of the original matrix
canvas=m.copy()
# convert canvas to have 'object' type so it can contain different types
canvas=canvas.astype('object')
#replace the values with the colors
canvas[canvas==0]='white'
canvas[canvas==1]='black'

canvas 现在将是一个 numpy 数组,其中 m 的所有元素等于 0 为白色,所有元素等于 1 的元素为黑色。

【讨论】:

  • 使用np.where(m, 'black', 'white')
【解决方案2】:

查看iamchoosinganame 的答案,它简洁并使用了numpy 的强大功能。

我在这里留下我的答案只是为了展示如何根据您的代码正确循环:

您的代码错误地只检查矩阵的主对角线。

想一想:在你完成 a=1b=1 之后,你会增加两者,所以下一次迭代是 a=2b=2,然后是 a=3b=3... 等等。

另外 - range 最后不包含在内,因此您希望 range(0,100) 使所有数字达到 99

您想使用for 两次(另外,您不必自己增加循环变量):

m=np.loadtxt("C:\\Users\\DELL\\Desktop\\preklopenie_obrazka.txt", skiprows=1 )
for a in range(0,100):
    for b in range(0,100):
        if m[a][b]==0.0:
            f='white'
        else:
            f='black'
        print(f)  # CHANGE: just use f in whatever way you need

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 2014-04-22
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多