小编itz*_*bat的帖子

如何替换numpy数组中的值列表?

我有一个未排序的数字.

我需要用特定的替代品替换某些数字(在列表中给出)(也在相应的列表中给出)

我写了下面的代码(似乎有效):

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

python arrays performance numpy

6
推荐指数
1
解决办法
1411
查看次数

使用 sklearn python 初始化 GMM

我希望创建一个 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)

python scikit-learn

5
推荐指数
1
解决办法
1064
查看次数

如何在python中生成n维网格

我想生成一个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接受切片

python numpy

5
推荐指数
1
解决办法
3651
查看次数

标签 统计

python ×3

numpy ×2

arrays ×1

performance ×1

scikit-learn ×1