【问题标题】:Translating Matlab (Octave) group coloring code into python (numpy, pyplot)将 Matlab (Octave) 组着色代码翻译成 python (numpy, pyplot)
【发布时间】:2014-07-19 16:36:44
【问题描述】:

我想将以下组着色 octave 函数转换为 python 并将其与 pyplot 一起使用。

函数输入:
x - 数据矩阵 (m x n)
a - 一个参数。
index - 大小为“m”且值在 [:a] 范围内的向量
(例如,如果 a = 4,索引可以是 [random.choice(range(4)) for i in range(m)]

“index”中的值表示第“m”个数据点所属的组的编号。 该函数应绘制 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”的大小比“a”大。

提前感谢您的帮助。

【问题讨论】:

    标签: python matlab numpy octave hsv


    【解决方案1】:

    那么,您想获取HSV 中的m x 3 值,并将每一行转换为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. ]]
    

    跟进您的评论:

    如果我知道您有一个 p 矩阵 a x 3 矩阵,并且您想一遍又一遍地从矩阵中随机选择行,直到您有一个新矩阵 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])
    

    产生一个20 x 3 矩阵。

    【讨论】:

    • 嗨,阿农,感谢您的快速回答。不幸的是,你的答案并不是我想要的,我想我对我需要什么还不够清楚。我会尝试更好地解释:我的主要问题(据我所知)不是从 HSV 转换为 RGB,我想我使用上面的 colors.hsv_to_rgb 函数解决了它。我的主要问题是如何在 numpy 中进行八度选择 p(index, :)
    • 我将尝试举一个更清楚的例子:如果 a = 4 和 m = 20 那么 p metrix 是 4 x 3 但索引向量是 20 x 1,现在我需要根据 index 中 20 个元素的值 (1 - 4) 从 p 中选择 20 行。
    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2017-10-12
    • 1970-01-01
    • 2013-11-25
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多