【发布时间】:2018-02-13 21:49:01
【问题描述】:
我正在阅读 this guide 关于将光谱转换为 rgb 颜色坐标的内容。
我基本上了解代数在做什么,但作者并没有真正解释处理白点的代数,我也看不懂完成这项工作的 Python/numpy 代码
import numpy as np
class ColourSystem:
def __init__(self, red, green, blue, white):
self.red, self.green, self.blue = red, green, blue
self.white = white
# The chromaticity matrix (rgb -> xyz) and its inverse
self.M = np.vstack((self.red, self.green, self.blue)).T
self.MI = np.linalg.inv(self.M)
# White scaling array
self.wscale = self.MI.dot(self.white)
# xyz -> rgb transformation matrix
self.T = self.MI / self.wscale[:, np.newaxis]
最后两行让我感到困惑。我的解释是self.white 是一个列向量,所以self.MI.dot(self.white) 是一个矩阵向量乘法产生另一个列向量。
但在这种解释中,最后一行读起来就像用一个向量除一个矩阵,这对我来说毫无意义。
通过修改 rgb->xyz 矩阵的逆矩阵来生成 xyz->rgb 矩阵的最后一行是什么?
【问题讨论】:
-
我的理解是 self.wscale[:, np.newaxis] 正在将列向量(形状为 (3,))转换为 3x1 矩阵(形状为 (3,1))。然后,当您进行除法时,将应用广播,因此您将 3x3 矩阵 MI 除以通过重复 3 次 wscale 列向量获得的 3x3 矩阵。
-
“广播”?
标签: python numpy linear-algebra