如何编辑矩阵中的每第三列
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 list
s 中使用的选项不同,因为在您的示例中可以注意到这一点。
-
它允许以更灵活的方式操作多维数组。例如,如果它像
panel[:,0::3]
一样放在逗号之后,则表示获取了此二维数组的列的副本。
panel[:,0::3] = i
是按元素分配的。
请注意,panel[:,0::3] = i
不会将元素分配给数组的副本,它会选择原始元素中的特定项目并替换它们。这两个概念都不适用于 Python list
s。
【讨论】:
以上是关于如何编辑矩阵中的每第三列的主要内容,如果未能解决你的问题,请参考以下文章