Могу ли я выполнить векторную операцию с использованием функции нормального распределения NumPy в массиве 2D NumPy так же, как я бы сделал с python for-l oop? Как это можно сделать?
Кажется, я не могу получить тот же результат, что и подход for-l oop с функцией numpy .normal (). В настоящее время я повторяю список [1, 2, 3]
в номере массива, чтобы проверить свой результат. Внутри массива могут быть разные списки. Ниже мой тестовый сценарий.
Python тестовый сценарий:
import numpy as np
from numpy.random import MT19937
from numpy.random import RandomState, SeedSequence
number2 = np.array( [[1, 2, 3], [1, 2, 3], [1, 2, 3]], dtype='uint16' )
print( f'\nmu2 = {mu2}')
print( f'sigma2 = {sigma2}')
print( f'number2 = {number2}\n')
print( f'Loop Approach:')
for n, i in enumerate( number2 ):
rs = RandomState(MT19937(SeedSequence(seed)))
print( rs.normal(size=i.sum()) )
print( f'\nNumPy Normal Function Approach:')
rs = RandomState(MT19937(SeedSequence(seed)))
samples2 = np.random.normal( size=(number2.shape[0], np.sum(number2, axis=1)[0]) )
print( f'samples2 = {samples2}')
Вывод:
number2 = [[1 2 3]
[1 2 3]
[1 2 3]]
Loop Approach:
[-1.83130774 -0.17735435 0.0382792 -0.40295163 0.00205133 -0.09432702]
[-1.83130774 -0.17735435 0.0382792 -0.40295163 0.00205133 -0.09432702]
[-1.83130774 -0.17735435 0.0382792 -0.40295163 0.00205133 -0.09432702]
NumPy Normal Function Approach:
samples2 = [[ 1.93374683 2.12548353 -0.81608979 0.01696984 0.63914223 -0.01650647]
[ 0.22542085 -0.07496141 -1.59603393 0.27176325 -0.73825187 -2.01560195]
[ 0.06105081 -1.63196436 0.13322808 0.63191806 0.519154 -0.32172233]]