Python 我有一个长度不等的列表数组,计算每个列表长度的最快方法是什么
考虑数组Python 我有一个长度不等的列表数组,计算每个列表长度的最快方法是什么,python,pandas,numpy,Python,Pandas,Numpy,考虑数组a a = np.array([ [list(range(np.random.randint(4, 10))) for _ in range(10)], [list(range(np.random.randint(4, 10))) for _ in range(10)] ]).T print(a) [[[0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5]] [[0, 1, 2, 3, 4, 5, 6, 7] [0,
a
a = np.array([
[list(range(np.random.randint(4, 10))) for _ in range(10)],
[list(range(np.random.randint(4, 10))) for _ in range(10)]
]).T
print(a)
[[[0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5]]
[[0, 1, 2, 3, 4, 5, 6, 7] [0, 1, 2, 3, 4, 5, 6]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5, 6, 7, 8]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4]]
[[0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5, 6, 7]]
[[0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5, 6]]
[[0, 1, 2, 3, 4] [0, 1, 2, 3, 4]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5, 6, 7, 8]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5]]
[[0, 1, 2, 3, 4, 5, 6, 7] [0, 1, 2, 3, 4, 5, 6]
我希望输出像这样
[[7 6]
[8 7]
[9 9]
[9 5]
[6 8]
[6 7]
[5 5]
[9 9]
[9 6]
[8 7]]
为了使其效率最高,我建议使用发电机:
mygen = (map(len, row) for row in a)
这样你就不需要一次计算所有的东西。你只在需要的时候才做。但是我没有任何CPU基准来备份它。为了使它最有效,我建议使用生成器:
mygen = (map(len, row) for row in a)
这样你就不需要一次计算所有的东西。你只在需要的时候才做。但是我没有任何CPU基准来备份它。方法1pandas
def pir1(a):
return pd.Series(a.ravel()).str.len().values.reshape(a.shape)
方法2itertools
,map
,len
def pir2(a):
return np.array(
[i for i in map(len, itertools.chain.from_iterable(a))]).reshape(a.shape)
方法3@马辛
小型阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
大型阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
非常大的阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
方法1pandas
def pir1(a):
return pd.Series(a.ravel()).str.len().values.reshape(a.shape)
方法2itertools
,map
,len
def pir2(a):
return np.array(
[i for i in map(len, itertools.chain.from_iterable(a))]).reshape(a.shape)
方法3@马辛
小型阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
大型阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
非常大的阵列
n, m = 10, 2
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 1000, 20
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
n, m = 10000, 200
a = np.array(
[[list(range(np.random.randint(1, 21))) for _ in range(m)] for _ in range(n)]
)
map
和len
我想起来了你是说最快的CPU效率,或者最快的执行速度(最少的行数)?CPU效率,坚持numpy,熊猫,标准库…@piRSquared然后可能将其作为生成器,将是最有效的:mygen=(map(len,row)用于a行)
,但是没有任何基准来支持它。@Marcin这是一个很好的答案。我已经想出了一个更快的方法,我会张贴。但我宁愿选择一个不是我的答案。你能把它贴出来吗?map
和len
请记住你的意思是最快的CPU效率,或者最快的执行速度(最少的行数)?CPU效率,坚持numpy,熊猫,标准库…@piRSquared然后可能把它作为一个生成器,将是最有效的:mygen=(map(len,row)对于a中的行)
,但是没有任何基准来支持它。@Marcin这是一个很好的答案。我已经想出了一个更快的方法,我会张贴。但我宁愿选择一个不是我的答案。你能把它贴出来吗?我用了你的建议:[[I代表我在地图上(len,row)代表a行]
我用了你的建议:[[I代表我在地图上(len,row)代表a行]