我想将以下组八度功能转换为 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"更大。
提前感谢您的帮助。
答案 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. ]]
按照您的评论进行操作:
如果我理解你的矩阵p
是a 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])
矩阵。