我有一个数据向量x
,以及两个索引向量left
和right
。 left
和right
中的值对应我想要定义的切片的下限值和上限值。
我可以这样写:
for l, r in zip(left, right):
z = x[l:r]
# Compute with z here
但这比任何假设的numpy解决方案要慢,因为在python中索引或迭代numpy数组通常很慢。要看到这个比较
python3 -m timeit -s "import numpy as np; x = np.arange(1000)" "np.sum(x)"
1000000 loops, best of 3: 1.9 usec per loop
到
python3 -m timeit -s "import numpy as np; x = np.arange(1000)" "sum(x)"
10000 loops, best of 3: 69 usec per loop
因此,左右任何python迭代都会减慢速度。我想知道是否可以使用更加惯用的基于numpy的索引和工具来做到这一点。
编辑:
有一个不太常见的问题实例的解决方案。如果left
和right
left[n + 1] == right[n]
0 < n < len(left) + 1
left
,则right
和x
形成create keyspace demo WITH REPLICATION = {'class' : 'SimpleStrategy','replication_factor': 3 };
USE ycsb;
create table usertable (
y_id varchar primary key,
field0 varchar,
field1 varchar,
field2 varchar,
field3 varchar,
field4 varchar,
field5 varchar,
field6 varchar,
field7 varchar,
field8 varchar,
field9 varchar);
的分区。分裂点可以由单个索引数组表示。在这种情况下,您可以使用numpy.split。