python - 如何创建多维 numpy 数组?

标签 python numpy multidimensional-array

我有一个带有 n 个值的 numpy 一维数组,我们将其称为 xdata

我想创建一个多维 numpy 数组,我们将其命名为 xdataMulti,这样该数组的每个维度都包含 xdata 中特定范围内的值。

例如,我们可以这么说

xdata = np.array([-0.879645943,-0.7897614865,-0.7051130178,-0.6108652382,-0.5270894341,...])

并且我想将 -0.9-0.6 之间的 xdata 的所有值放入 xdataMulti[:,0] 和所有值中xdataMulti[:,1] 中的 -0.60 之间,等等

如何创建和填充xdataMulti(我事先知道我有多少个范围及其端点,但我不知道每个范围中有多少个xdata点,我必须循环遍历xdata 来找出答案)?

最佳答案

如果您的范围数量不太大,您可以手动创建它们

 gm09 = xdata >= -0.9
 gm06 = xdata >= -0.6
 g0   = xdata >= 0
 ranges = [xdata[gm09 & ~gm06], xdata[gm06 & ~g0]]
 result = [f(r) for r in ranges]

其中 f 是您的 scipy 函数。

如果您的范围数量很大,您可以对数据进行排序,然后使用 搜索排序。假设您在排序数组 bnd 中具有 block 的边界:

xs = np.sort(xdata)
xbnd = np.searchsorted(xs, bnd)
ranges = [xs[l:r] for l, r in zip(xbnd[:-1], xbnd[1:])]
result = [f(r) for r in ranges]

请注意,这与第一个解决方案不同,因为您的范围将被排序。

如果需要保留原始顺序,可以使用间接排序

order = np.argsort(xdata)
xbnd = np.searchsorted(xdata[order], bnd)
ordord = [np.sort(order[l:r]) for l, r in zip(xbnd[:-1], xbnd[1:])]
ranges = [xdata[oo] for oo in ordord]
result = [f(r) for r in ranges]

关于python - 如何创建多维 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862416/

相关文章:

python - 使用键列表遍历多维字典的优雅方式?

java - 在Java中访问/创建多维数组

python - 检查用户输入的 IP 地址是否有效

python - 从子文件夹和文件夹中读取文本文件,并在 pandas 中为每个文件文本创建一个数据框作为一次观察

python - 为什么在 Python 中有一个 __iter__ 方法?

python - 如何为 np.random.uniform 生成种子?

python - 在 Python 中将整数列表转换为字节数组

Python输入函数解释

python - 如何使用 python + NumPy/SciPy 计算滚动/移动平均值?

c# - 寻找最大问题