如何编辑矩阵中的每第三列

Posted

技术标签:

【中文标题】如何编辑矩阵中的每第三列【英文标题】:How to edit every 3rd column in a matrix 【发布时间】:2020-01-29 01:30:32 【问题描述】:

第一次发帖。对 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!")

我认为类似的事情会有所帮助:Edit every other item in an array 它没有产生我预期的结果。任何帮助将不胜感激。

寻找有关此功能的解释: 面板[:,0::3] 0::3 究竟做了什么?

谢谢!

【问题讨论】:

不要使用全局变量 :) 查看***.com/questions/509211/understanding-slice-notation 【参考方案1】:

0::3 是标准的 Python slicing 表示法。相当于一个索引序列,从0开始,步长=3递增。

numpy 中的切片选项与 Python lists 中使用的选项不同,因为在您的示例中可以注意到这一点。

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

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

【讨论】:

以上是关于如何编辑矩阵中的每第三列的主要内容,如果未能解决你的问题,请参考以下文章

求秩可以取第一列和第三列的值吗

matlab中如何向矩阵中添加元素

如何获取脚本以将 2 个变量的总和添加到表格中的第三列

如何选择在两列中具有相同值集的行,从而连接第三列中的值?

如何使用AWK将包含特定字符串的行之后的行的第三列中的值打印到不同的文件?

两行三列的矩阵和三行三列的矩阵相乘