Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将原始数据插入python中随机生成的数据_Python_Python 3.x_Numpy - Fatal编程技术网

将原始数据插入python中随机生成的数据

将原始数据插入python中随机生成的数据,python,python-3.x,numpy,Python,Python 3.x,Numpy,假设我有一个3d(10x3)np.array: orgArr = [[ 30.1678 -173.569 725.724 ] [ 29.9895 -173.34 725.76 ] [ 29.9411 -173.111 725.768 ] [ 29.9306 -173.016 725.98 ] [ 29.6754 -172.621 725.795 ] [ 29.5277 -172.274 725.903 ] [ 29.585 -171.97

假设我有一个3d(10x3)np.array:

orgArr = [[  30.1678 -173.569   725.724 ]
 [  29.9895 -173.34    725.76  ]
 [  29.9411 -173.111   725.768 ]
 [  29.9306 -173.016   725.98  ]
 [  29.6754 -172.621   725.795 ]
 [  29.5277 -172.274   725.903 ]
 [  29.585  -171.978   726.111 ]
 [  29.4114 -171.507   726.188 ]
 [  29.3951 -170.947   726.173 ]
 [  29.3577 -170.196   726.384 ]]
对于每个列,我生成rondom编号,在单个列的最小值和最大值之间,例如,对于第一列:

# Find min/max
colXMin = np.min(orgArr[:, 0])
colXMax = np.max(orgArr[:, 0])

# Generate random number between min/max
size = 12
addRandomToColX = self.create_random_floats(colXMin, colXMax, size)

# Sort the random numbers
sortRandomColX= sorted(addRandomToColX, reverse= True)
print('sortRandomColX:', sortRandomColX)

# Do same for cols y and z
...

# Create 3d array finally
randomArr = np.array([sortRandomColX, sortRandomColY, sortRandomColZ]).T
    print('randomArr:', randomArr)


def create_random_floats(low, high, size):
    return [random.uniform(low, high) for _ in range(size)]
所以我得到了12x3数组,它是按照给定的顺序排序的。列x减小,但y和z增大:

randomArr: 
[[  30.16564103 -173.45321119  725.74404996]
 [  30.03986524 -173.17110927  725.84951132]
 [  29.97088507 -173.15435901  725.85341553]
 [  29.79273295 -172.76247176  725.97347288]
 [  29.53294671 -170.90169722  726.27944054]
 [  29.53182418 -170.88261603  726.34089036]
 [  29.52163245 -170.72931883  726.34411865]
 [  29.50194557 -170.71866152  726.34946239]
 [  29.45834997 -170.68671434  726.36413176]
 [  29.4426014  -170.57381107  726.37110357]
 [  29.43702889 -170.40826716  726.45476367]
 [  29.3621429  -169.77240546  726.51968671]]

如何在
randomArr
数据中再次随机插入/混合我的
orgArr
数据,并将其分布到整个大小?我的意思是在
randomArr
中不在开头或结尾。否则,indivudial列的排序顺序将被打破

解决方案,主要依靠
numpy
。不过,对颠倒列顺序的部分不满意。但这并不以数组作为参数

import numpy as np
orgArr = np.asarray([[  30.1678, -173.569,   725.724 ],
                     [  29.9895, -173.34,    725.76  ],
                     [  29.9411, -173.111,   725.768 ],
                     [  29.9306, -173.016,   725.98  ],
                     [  29.6754, -172.621,   725.795 ],
                     [  29.5277, -172.274,   725.903 ],
                     [  29.585,  -171.978,   726.111 ],
                     [  29.4114, -171.507,   726.188 ],
                     [  29.3951, -170.947,   726.173 ],
                     [  29.3577, -170.196,   726.384 ]])
#number of rows to add
n2add = 12
#min/max for each column
orgMin = np.min(orgArr, axis = 0)
orgMax = np.max(orgArr, axis = 0)
#generate array with random values between min/max of each column 
randomArr = (orgMax - orgMin) * np.random.random((n2add + orgArr.shape[0], orgArr.shape[1])) + orgMin
#insert original values
randomArr[:orgArr.shape[0], :] =  orgArr
#sort values
randomArr.sort(axis = 0)
#determines for each column, if direction of order in orgArr is the same as in randomArr
#and reverses column order, if not
col_ord = np.sign((orgArr[0,:] - orgArr[-1,:])) * np.sign((randomArr[0,:] - randomArr[-1,:]))
for i in range(orgArr.shape[1]):
    if col_ord[i] < 0:
        randomArr[:,i] = randomArr[::-1,i]
您还可以使用此脚本的其他分发功能,
numpy
scipy
提供了多种功能。例如:


如果现在查看输出数组,您会注意到新生成的值(由更多数字表示)可以在数组的一端找到。但要小心不要超过分布函数的限制(0,1)。示例
mu=0.1 sigma=0.001
显示了对最终分布的影响<代码>0.5/0.2可以正常工作,但您不会收到
0.5/5
的错误消息,这将超出初始范围。

我不确定插入/混合是什么意思。每个列是否应包含从
self.创建\u random\u float
加上原始10个值(因此最终形状(22,3))生成的12个排序随机值,但这些值应出现在列内的随机位置?是,正确。末端的最终形状是(22,3)。但这些不应随机插入,而应以正确的顺序插入。例如,
finalArrColX:[*30.1678*、30.16564103、30.03986524、*29.9895*、29.97088507…]
星星之间的数字*来自
orgArr
而其他则来自
randomArr
我想它将与
数组(set(orgArr+randomArr)
一起工作。因此,如果新数组排序不正确,我可以使用
sorted>排序(数组,反向=真)
再次?仍然不确定生成结果的规则。在您的示例中,所有值都是降序的。但是根据您的描述,我假设另一个有效的可能性是30.1678、29.9895、30.16564103……对吗?所以两个独立的降序数组在随机位置混合到一个列中?它也可以从w开始使用一个来自
randomArr
的值?不,这与它开始的值无关。要点是,我再次以降序获得一列。因此,您的列表无效,因为它没有按降序排序谢谢您的回答。这正是我需要的。我可以问您另一个问题吗?根据
的定义np.random.random
它在半开放区间内创建随机浮点数,就像在
np.random.uniform
中一样,但这里我们选择低和高。我们自己。我如何确定创建的随机浮点数的标准偏差不大于给定区间。假设我在最小值和最大值之间生成随机数但是SD不应该大于0.2?是的,正是这个函数。但是我不确定如何在上面的例子中使用它
#randomArr
[[  30.1678     -173.569       725.724     ]
 [  30.11384713 -173.34        725.76      ]
 [  30.02906243 -173.23713466  725.768     ]
 [  29.9895     -173.111       725.795     ]
 [  29.94555434 -173.016       725.83462631]
 [  29.9411     -172.78230979  725.903     ]
 [  29.9306     -172.6898037   725.95312697]
 [  29.92622676 -172.621       725.98      ]
 [  29.91989733 -172.44033232  726.01484565]
 [  29.91581341 -172.42239247  726.08304636]
 [  29.89624414 -172.30021976  726.08525885]
 [  29.84977922 -172.29533928  726.08784464]
 [  29.80493116 -172.274       726.10620276]
 [  29.6754     -172.03366934  726.111     ]
 [  29.63979452 -171.978       726.14750753]
 [  29.585      -171.67822537  726.1535495 ]
 [  29.5277     -171.507       726.173     ]
 [  29.49315771 -171.33446469  726.18671858]
 [  29.42592778 -171.15097712  726.188     ]
 [  29.4114     -170.947       726.24372921]
 [  29.3951     -170.87844982  726.29369897]
 [  29.3577     -170.196       726.384     ]]
randomArr = (orgMax - orgMin) * np.random.normal(0.1, 0.001, (n2add + orgArr.shape[0], orgArr.shape[1])) + orgMin