我有一个未排序的数字.
我需要用特定的替代品替换某些数字(在列表中给出)(也在相应的列表中给出)
我写了下面的代码(似乎有效):
import numpy as np
numbers = np.arange(0,40)
np.random.shuffle(numbers)
problem_numbers = [33, 23, 15] # table, night_stand, plant
alternative_numbers = [12, 14, 26] # desk, dresser, flower_pot
for i in range(len(problem_numbers)):
idx = numbers == problem_numbers[i]
numbers[idx] = alternative_numbers[i]
Run Code Online (Sandbox Code Playgroud)
然而,这似乎非常低效(对于更大的阵列,这需要进行数百万次).
我发现这个问题回答了类似的问题,但在我的情况下,数字没有排序,他们需要保持原来的位置.
注意:numbers可能包含多个或不包含的元素problem_numbers
我希望创建一个 sklearn GMM 对象,其中包含一组预定义的均值、权重和协方差(在网格上)。
我设法做到了:
from sklearn.mixture import GaussianMixture
import numpy as np
def get_grid_gmm(subdivisions=[10,10,10], variance=0.05 ):
n_gaussians = reduce(lambda x, y: x*y,subdivisions)
step = [ 1.0/(2*subdivisions[0]), 1.0/(2*subdivisions[1]), 1.0/(2*subdivisions[2])]
means = np.mgrid[ step[0] : 1.0-step[0]: complex(0,subdivisions[0]),
step[1] : 1.0-step[1]: complex(0,subdivisions[1]),
step[2] : 1.0-step[2]: complex(0,subdivisions[2])]
means = np.reshape(means,[-1,3])
covariances = variance*np.ones_like(means)
weights = (1.0/n_gaussians)*np.ones(n_gaussians)
gmm = GaussianMixture(n_components=n_gaussians, covariance_type='spherical' )
gmm.weights_ = weights
gmm.covariances_ = covariances
gmm.means_ = means
return gmm
def main():
xx = np.random.rand(100,3)
gmm = get_grid_gmm()
y= gmm.predict_proba(xx)
if …Run Code Online (Sandbox Code Playgroud) 我想生成一个n维网格。
对于 3D 网格,我有以下工作代码(它在 (-1,1 ) 之间创建 5X5X5 的网格
import numpy as np
subdivision = 5
step = 1.0/subdivision
grid= np.mgrid[ step-1 : 1.0-step: complex(0, subdivision),
step-1 : 1.0-step: complex(0, subdivision),
step-1 : 1.0-step: complex(0, subdivision)]
Run Code Online (Sandbox Code Playgroud)
我想将其推广到 n 维,所以像
grid = np.mgrid[step-1 : 1.0-step: complex(0,subdivision) for i in range(n)]
Run Code Online (Sandbox Code Playgroud)
但这显然行不通。我也尝试过
temp = [np.linspace(step-1 , 1.0-step, subdivision) for i in range(D)]
grid = np.mgrid[temp]
Run Code Online (Sandbox Code Playgroud)
但这也不起作用,因为np.mgrid接受切片