python - 将范围应用于数组
问题描述
np.arange
接受三个参数:start、stop 和 step。
我想要的步骤是-0.3048。我也有单独的数组用于启动和停止。
首先,我有一个完整的元素数组:
array([5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.377, 5.000,
5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.462, 3.285,
5.000, 5.000, 4.150, 5.000, 5.000, 5.000, 5.000, 5.000, 4.118, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.674, 5.000, 5.000, 5.000, 5.000,
5.000, 5.000, 4.655, 5.000, 5.000, 5.000, 4.573, 5.000, 5.000, 4.775, 4.909, 5.000, 5.000, 5.000, 3.874, 5.000, 5.000, 3.197, 5.000, 5.000,
5.000, 5.000, 5.000, 4.829, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.372, 4.175, 5.000, 5.000, 5.000, 5.000,
5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.793, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.993, 5.000, 5.000, 5.000, 5.000, 5.000,
5.000, 4.898, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.294, 5.000])
以下是相应的停止值:
array([1.927, -0.018, 0.214, 4.390, 0.162, 3.790, 4.891, -0.011, 4.623, 1.203, 4.270, 3.239, 4.569, 0.001, 3.942, 4.363, 3.135, 4.390, 3.176, 4.390,
3.958, 3.992, 0.595, 4.458, 4.897, -0.009, -0.004, 0.004, 0.010, 4.987, 4.454, 3.167, 3.791, 4.213, 3.100, 4.312, 4.166, 3.942, 1.984, 2.077,
4.810, 0.737, 0.490, 3.167, -0.010, 0.214, 4.313, 3.607, 2.509, 2.801, 3.034, 3.257, 0.013, 4.398, 0.013, 2.509, 4.157, 4.365, 4.902, 2.109,
4.390, 3.176, 3.034, 4.096, 0.168, 3.205, 3.176, 1.927, 4.352, 2.509, 2.848, 4.749, 4.217, 3.017, 2.509, 4.204, 0.268, 1.662, 4.124, 0.136,
2.509, 1.623, 4.791, 0.028, 2.969, 4.770, 4.799, 3.167, 2.970, 4.301, 0.883, 4.314, 0.182, -0.051, 2.493, 2.509, 4.131, 4.001, 4.952, 4.209,
4.363, 4.632, 4.390, 3.172, 3.470, 0.174, 4.804, 2.247, 2.751, 4.352, 4.110, 2.969, 4.914, 2.142, 2.120, 4.936, 3.780, 3.942, 1.042, 4.229,
2.267, 1.927, 1.213, 2.509, 4.464, 4.464, 0.595, 4.442, 2.751, 2.509, 3.339])
我需要对每个元素应用范围。
最快的方法是什么?我知道我可以使用 for 循环,但我希望有一个 numpy-native 解决方案(即矢量化)。
谢谢。如果有任何不清楚的地方,请告诉我。
解决方案
如果您想即时创建它们,可以使用 for 循环:
starts = np.array([5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.377, 5.000,
5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.462, 3.285,
5.000, 5.000, 4.150, 5.000, 5.000, 5.000, 5.000, 5.000, 4.118, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.674, 5.000, 5.000, 5.000, 5.000,
5.000, 5.000, 4.655, 5.000, 5.000, 5.000, 4.573, 5.000, 5.000, 4.775, 4.909, 5.000, 5.000, 5.000, 3.874, 5.000, 5.000, 3.197, 5.000, 5.000,
5.000, 5.000, 5.000, 4.829, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.372, 4.175, 5.000, 5.000, 5.000, 5.000,
5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.793, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.993, 5.000, 5.000, 5.000, 5.000, 5.000,
5.000, 4.898, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.294, 5.000])
stops = np.array([1.927, -0.018, 0.214, 4.390, 0.162, 3.790, 4.891, -0.011, 4.623, 1.203, 4.270, 3.239, 4.569, 0.001, 3.942, 4.363, 3.135, 4.390, 3.176, 4.390,
3.958, 3.992, 0.595, 4.458, 4.897, -0.009, -0.004, 0.004, 0.010, 4.987, 4.454, 3.167, 3.791, 4.213, 3.100, 4.312, 4.166, 3.942, 1.984, 2.077,
4.810, 0.737, 0.490, 3.167, -0.010, 0.214, 4.313, 3.607, 2.509, 2.801, 3.034, 3.257, 0.013, 4.398, 0.013, 2.509, 4.157, 4.365, 4.902, 2.109,
4.390, 3.176, 3.034, 4.096, 0.168, 3.205, 3.176, 1.927, 4.352, 2.509, 2.848, 4.749, 4.217, 3.017, 2.509, 4.204, 0.268, 1.662, 4.124, 0.136,
2.509, 1.623, 4.791, 0.028, 2.969, 4.770, 4.799, 3.167, 2.970, 4.301, 0.883, 4.314, 0.182, -0.051, 2.493, 2.509, 4.131, 4.001, 4.952, 4.209,
4.363, 4.632, 4.390, 3.172, 3.470, 0.174, 4.804, 2.247, 2.751, 4.352, 4.110, 2.969, 4.914, 2.142, 2.120, 4.936, 3.780, 3.942, 1.042, 4.229,
2.267, 1.927, 1.213, 2.509, 4.464, 4.464, 0.595, 4.442, 2.751, 2.509, 3.339])
step = -0.3048
if len(starts)!=len(stops):
raise IndexError("Shape of starts does not match shape of stops")
for i in range(len(starts)):
myrange = np.arange(starts[i], stops[i], step)
# do things
变得更花哨:
pairs = list(zip(starts, stops))
for start, stop in pairs:
myrange = np.arange(start, stop, step)
我确信有一个更好的numpy
-native 实现,但这可以让你起步
推荐阅读
- three.js - 在 Blender 中未应用缩放时修复 Three.js 模型
- sql - SQLite - 使用通配符加入
- url - 在 VBScript 中解析 URL
- google-cloud-platform - 如何解决 Google Dataflow 中的稳定性问题
- sql - 组合复杂数据透视表中的列
- content-management-system - Contentstack:无法编辑 URL 字段的属性
- sql - SQL - 如何多次更新同一行
- javascript - 我可以简化这个构造函数的实例化吗?
- html - 我可以将元素 ID 命名为 null 还是会导致问题?
- import - Three.js - 如何将导入方法转换成常规js文件