假设我有一个Python Numpy数组a.
a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
Run Code Online (Sandbox Code Playgroud)
我想从这个长度为5的数组创建一个子序列矩阵,步长为3.结果矩阵因此如下所示:
numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
Run Code Online (Sandbox Code Playgroud)
实现这一点的一种可能方式是使用for循环.
result_matrix = np.zeros((3, 5))
for i in range(0, len(a), 3):
result_matrix[i] = a[i:i+5]
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来实现这个Numpy?
我在这里和那里回答几个问题.我经常测试我和其他人的解决方案有多快.
是否有一个简单的框架来全面了解各种解决方案的速度有多快?
考虑数据帧 df
df = pd.DataFrame({
'Group': list('QLCKPXNLNTIXAWYMWACA'),
'Value': [29, 52, 71, 51, 45, 76, 68, 60, 92, 95,
99, 27, 77, 54, 39, 23, 84, 37, 99, 87]
})
Run Code Online (Sandbox Code Playgroud)
我想总结Value按不同值分组的列Group.我有三种方法可以做到这一点.
import pandas as pd
import numpy as np
from numba import njit
def sum_pd(df):
return df.groupby('Group').Value.sum()
def sum_fc(df):
f, u = pd.factorize(df.Group.values)
v = df.Value.values
return pd.Series(np.bincount(f, weights=v).astype(int), pd.Index(u, name='Group'), name='Value').sort_index()
@njit
def wbcnt(b, w, k):
bins = np.arange(k)
bins = …Run Code Online (Sandbox Code Playgroud) 鉴于目标('b', 'a')和投入:
x0 = ('b', 'a', 'z', 'z')
x1 = ('b', 'a', 'z', 'z')
x2 = ('z', 'z', 'a', 'a')
x3 = ('z', 'b', 'a', 'a')
Run Code Online (Sandbox Code Playgroud)
目的是找到连续('b', 'a')元素的位置并获得输出:
>>> find_ba(x0)
0
>>> find_ba(x1)
0
>>> find_ba(x2)
None
>>> find_ba(x3)
1
Run Code Online (Sandbox Code Playgroud)
使用pairwise食谱:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
Run Code Online (Sandbox Code Playgroud)
我可以这样做以获得所需的输出:
def find_ba(x, target=('b', 'a')):
try:
return next(i for i, pair …Run Code Online (Sandbox Code Playgroud) 我有一个大型数据帧(5000 x 12039),我想获得与numpy数组匹配的列名.
例如,如果我有桌子
m1lenhr m1lenmin m1citywt m1a12a cm1age cm1numb m1b1a m1b1b m1b12a m1b12b ... kind_attention_scale_10 kind_attention_scale_22 kind_attention_scale_21 kind_attention_scale_15 kind_attention_scale_18 kind_attention_scale_19 kind_attention_scale_25 kind_attention_scale_24 kind_attention_scale_27 kind_attention_scale_23
challengeID
1 0.130765 40.0 202.485367 1.893256 27.0 1.0 2.0 0.0 2.254198 2.289966 ... 0 0 0 0 0 0 0 0 0 0
2 0.000000 40.0 45.608219 1.000000 24.0 1.0 2.0 0.0 2.000000 3.000000 ... 0 0 0 0 0 0 0 0 0 0
3 0.000000 35.0 39.060299 2.000000 23.0 1.0 2.0 0.0 2.254198 …Run Code Online (Sandbox Code Playgroud) 我很新,我希望它不是太明显,但我似乎无法找到以下问题的简短而准确的答案.
我有两个清单:
a = [2,3,5,2,5,6,7,2]
b = [2,5,6]
Run Code Online (Sandbox Code Playgroud)
我想找到第二个list(b)的所有索引都在第一个list(a)中,这样我得到这样的东西:
a中的b的索引:3, 4, 5或b = a[3:6]