这需要努力才能做到。
温度=类型转换(重塑([randi([0(2^8-1)]),6,N,‘uint8’);兰迪([0(2^5-1)],1,N);零(1,N,‘uint8’)],[],1),‘uint64’)
temp =
6216815486836182 5783593910339116 5332195457436175 6764184342683364 8586546077226935 7892688937955983
iwant(iwant==0)=1
我万特=
0.690205169333178 0.642107912434033 0.591992616864731 0.750975320005605 0.953298115694216 0.876264498512301
不能使用rand(),因为rand()排除0和1。
您不能[直接]使用randi(),因为randi的最大跨度为2^53-2
所以…我们要做的是生成一个53位二进制数,并将其打包成一个uint64。一个53位二进制数有2^53个不同的可能值,从0到2^53-1。我们可以将该值加倍(),因为所有0到2^53的整数都可以直接以双精度表示。然后我们除以2^53以缩放到0(2^53-1)/2^53。然后我们检查0,如果我们看到它,我们将替换为1。所以现在我们有一个2^53不同数字的范围,不包括0,包括1。