将Matlab(Octave)组着色代码翻译成python(numpy,pyplot)

时间:2014-05-30 01:43:40

标签: python matlab numpy octave hsv

我想将以下组八度功能转换为 python ,并将其与 pyplot 一起使用。

功能输入:
x - 数据矩阵(m x n)
a - 参数。
索引 - 大小为#34; m"值范围为[:a]
(例如,如果a = 4,索引可以是[random.choice(range(4)),其中i在范围(m)中]

" index"中的值表示第34个数据点所属的组的编号。 该函数应绘制来自x的所有数据点,并以不同颜色对其进行着色(不同颜色的数量为" a")。

八度音程中的函数:

p = hsv(a); % This is a x 3 metrix
colors = p(index, :); % ****This is m x 3 metrix****
scatter(X(:,1), X(:,2), 10, colors);

我无法在python中找到像hsv这样的函数,所以我自己写了(我想我做了......):

 p = colors.hsv_to_rgb(numpy.column_stack((
numpy.linspace(0, 1, a), numpy.ones((a ,2)) )) )

但我无法弄清楚如何在python(numpy)中进行矩阵选择p(index,:)。 特别是因为" index"的大小比#34; a"更大。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

那么,您想获取m x 3 HSV个值,并将每行转换为RGB

import numpy as np
import colorsys
mymatrix = np.matrix([[11,12,13],
                      [21,22,23],
                      [31,32,33]])

def to_hsv(x):
    return colorsys.rgb_to_hsv(*x)

#Apply the to_hsv function to each matrix row.
print np.apply_along_axis(to_hsv, axis=1, arr=mymatrix)

这会产生:

[[  0.5   0.   13. ]
 [  0.5   0.   23. ]
 [  0.5   0.   33. ]]

按照您的评论进行操作:

如果我理解你的矩阵pa x 3矩阵,并且你想要一遍又一遍地从矩阵中随机选择行,直到你有一个新的矩阵{{ 1}}?

确定。我们假设您的矩阵m x 3定义如下:

p

现在,列出范围a = 5 p = np.random.randint(5, size=(a, 3)) 之间的随机整数(索引从0 -> 3开始到0),长度为a-1

m

现在访问正确的索引并将其插入新矩阵:

m = 20
index = np.random.randint(a, size=m)

生成p_prime = np.matrix([p[i] for i in index]) 矩阵。