将字典中的元组分配给数组Python

时间:2017-08-02 20:40:39

标签: arrays python-2.7 image-processing tuples

我有一个带有因子和X和Y坐标的数据透视表数组,如下面的那个,我有一个64色的查找表,它有RGB值。我已经使用元组字典为每个因子组合分配了一种颜色,但我很难弄清楚如何比较我的dictonary的键(这是不同的因素组合)和我的数组,以便每行可以为该因子组合分配字典中给出的颜色。

这是数据透视表的一个例子:

A  B  C  D  Xpoint  Ypoint
0  1  0  0  20      20
0  1  1  0  30      30
0  1  0  0  40      40
1  0  1  0  50      50
1  0  1  0  60      60

编辑:这是LUT的一个例子:

R   G   B
0   0   0
1   0   103
0   21  68
95  173 58

这是一个字典的例子:

{
   (0, 1, 0, 0): (1, 0, 103), 
   (0, 1, 1, 0): (12, 76, 161), 
   (1, 0, 1, 0): (0, 0, 0)
}

这是我使用过的代码:

import numpy as np
from PIL import Image, ImageDraw

## load in LUT of 64 colours ##
LUT = np.loadtxt('LUT64.csv', skiprows=1, delimiter=',')
print LUT

## load in XY COordinates ##
PivotTable = np.loadtxt('PivotTable_2017-07-13_001.txt', skiprows=1, delimiter='\t')
print PivotTable

## Bring in image ##
IM = Image.open("mothTest.tif")

#bring in number of factors
numFactors = 4

#assign colour vectors to factor combos
iterColours = iter(LUT)  
colour_dict = dict() # size will tell you how many colours will be used
for entry in PivotTable:
    key = tuple(entry[0:numBiomarkers])
    if key not in colour_dict:
        colour_dict[key] = next(iterColours)
print(colour_dict)

有没有办法将此字典中的元组与数据透视表数组中的行进行比较,或者可能有更好的方法来执行此操作?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

如果我的目标是,正如我在上面的评论中所假设的那样,追溯到ntuple的颜色,那么你已经做了所有事情。但我不知道tif文件扮演的角色...请注意我更正了对不存在的NumBiomarkers变量的引用...

import numpy as np
from PIL import Image, ImageDraw

## load in LUT of 64 colours ##
LUT = np.loadtxt('LUT64.csv', skiprows=1, delimiter=',')
print LUT

## load in XY COordinates ##
PivotTable = np.loadtxt('PivotTable_2017-07-13_001.txt', skiprows=1, delimiter=',')
print PivotTable

## Bring in image ##
IM = Image.open("Lenna.tif")

#bring in number of factors
numFactors = 4

#assign colour vectors to factor combos
iterColours = iter(LUT)  
colour_dict = dict() # size will tell you how many colours will be used
for entry in PivotTable:
    key = tuple(entry[0:numFactors])
    if key not in colour_dict:
        colour_dict[key] = next(iterColours)
print(colour_dict)
print '===='

for entry in PivotTable:
    key = tuple(entry[0:numFactors])
    print str(entry) + ' ' + str(colour_dict[key])

答案 1 :(得分:0)

你能为LUT64.csv添加一个简短的例子,PivotTable_2017-07-13_001.txt吗?也许对于这个,您还应该使用与\ t不同的分隔符,以确保示例的可移植性。

此致