首页 > 解决方案 > 如何编辑矩阵中的每第三列

问题描述

第一次发帖。对python真的很陌生。

我目前有一个 16x96 的 LED 面板,带有紫外线、绿色和蓝光。这个想法是使整个面板(矩阵)以用户输入的特定强度以用户选择的特定颜色点亮。我知道有一种更有效的方法可以用变量编写代码,但我需要一点帮助。怎样才能点亮第一列、第四列、第七列等等,直到整个LED面板都点亮到UV?或者在绿色的情况下:第二列、第五列、第八列等?基本上每次都比原版+3。我写的代码如下:

    panel = np.zeros((16,96))

    #function that encompasses object color when selected
    def click1():
        global a
        global i
        i = lightintensityentry.get()
        a = var1.get() #variable associated with selection
        if a == 1:
            panel[:,0::3] = i
            print(panel)
            print("Object is a UV light!")
        elif a == 2:
            panel[:,1::4]= i
            print(panel)
            print("Object is a green light!")
        elif a == 3:
            panel[:,2::3]= i
            print(panel)
            print("Object is a blue light!")
        elif a == 4:
            print(panel) #would be all zeros, therefore no light
            print("Object produces no light!")

我认为与此类似的事情会有所帮助:编辑数组中的所有其他项目 它没有产生我期望的结果。任何帮助,将不胜感激。

寻找对它的作用的解释:panel[:,0::3] 0::3 究竟做了什么?

谢谢!

标签: python

解决方案


0::3是标准的 Python切片符号。它相当于一个索引序列,从 0 开始,按 step = 3 递增。

numpy切片选项不同于 Python 中使用的选项,因为list它可以在您的示例中注意到。

  1. 它允许以更灵活的方式操作多维数组。例如,如果它像 in 一样放在逗号之后panel[:,0::3],则表示获取此二维数组的列的副本。
  2. panel[:,0::3] = i是按元素分配的。

请注意,panel[:,0::3] = i不会将元素分配给数组的副本,它会选择原始项目中的特定项目并替换它们。这两个概念都不适用于 Python list


推荐阅读