我生成一个正态分布,但通过使用np.random.seed(0)来保持平均值和标准差完全相同.我正在try 混洗r,除了数组的第一个和最后一个元素,但它将剩余的元素保持在数组中的相同位置,如当前输出所示.我还给出了预期yields .

import numpy as np

np.random.seed(0)

mu, sigma = 50, 2.0 # mean and standard deviation
Nodes=10
r = np.random.normal(mu, sigma, Nodes)

sort_r = np.sort(r); 
r1=sort_r[::-1]

r1=r1.reshape(1,Nodes)


r2 = r.copy()

np.random.shuffle(r2.ravel()[1:]) 

r2=r2.reshape(1,Nodes)                         #actual radius values in mu(m)

maximum = r2.max()
indice1 = np.where(r2 == maximum)
r2[indice1] = r2[0][0]
r2[0][0] = maximum

r2[0][Nodes-1] = maximum  #+0.01*maximum

print("r2 with max at (0,0)=",[r2])

多次运行的当前输出为

r2 with max at (0,0)= [array([[54.4817864 , 51.90017684, 53.52810469, 53.73511598, 48.04544424,
        51.95747597, 50.80031442, 50.821197  , 49.7935623 , 54.4817864 ]])]

预期输出为(随机排列除第一个和最后一个元素之外的所有元素)

Run 1: r2 with max at (0,0)= [array([[54.4817864 , 53.52810469, 51.90017684, ,53.73511598, 48.04544424,49.7935623 ,50.80031442, 50.821197  , 51.95747597,  54.4817864 ]])]

Run 2: r2 with max at (0,0)= [array([[54.4817864 , 51.90017684,53.52810469, 48.04544424, 53.73511598, 51.95747597,  49.7935623 ,50.80031442, 50.821197  , 54.4817864 ]])]

推荐答案

从你的问题看,你在一次 run 中包括了什么,这一点不是很清楚.

如果就像看起来的那样,您每次都在初始化分发和种子,那么洗牌一次总是会得到相同的结果.它必须是这样的,因为随机状态是固定的,就像你希望你的随机数是可预测的一样,随机操作将总是返回相同的结果.

让我用一些比您的代码更简单的代码向您展示我的意思:

# reinit distribution and seed at each run
for run in range(5):
    np.random.seed(0)
    a = np.random.randint(10, size=10)

    np.random.shuffle(a)
    print(f'{run}:{a}')

它将打印

0:[2 3 9 0 3 7 4 5 3 5]
1:[2 3 9 0 3 7 4 5 3 5]
2:[2 3 9 0 3 7 4 5 3 5]
3:[2 3 9 0 3 7 4 5 3 5]
4:[2 3 9 0 3 7 4 5 3 5]

您想要的是一次初始化您的发行版,并在每次运行时调整它:

# init distribution and just shuffle it at each run
np.random.seed(0)
a = np.random.randint(10, size=10)

for run in range(5):
    np.random.shuffle(a)
    print(f'{run}:{a}')

它将打印:

0:[2 3 9 0 3 7 4 5 3 5]
1:[9 0 3 4 2 5 7 3 3 5]
2:[2 0 3 3 3 5 7 5 4 9]
3:[5 3 5 3 0 2 7 4 9 3]
4:[3 9 3 2 5 7 3 4 0 5]

Python相关问答推荐

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

有什么方法可以避免使用许多if陈述

Polars:使用列值引用when / then表达中的其他列

TARete错误:类型对象任务没有属性模型'

海运图:调整行和列标签

如何让Flask 中的请求标签发挥作用

实现自定义QWidgets作为QTimeEdit的弹出窗口

将JSON对象转换为Dataframe

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何在turtle中不使用write()来绘制填充字母(例如OEG)

Python Pandas—时间序列—时间戳缺失时间精确在00:00

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

关于两个表达式的区别

提高算法效率的策略?

在用于Python的Bokeh包中设置按钮的样式

根据客户端是否正在传输响应来更改基于Flask的API的行为

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,

504未连接IB API TWS错误—即使API连接显示已接受''

如何提高Pandas DataFrame中随机列 Select 和分配的效率?