Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重复索引给定次数_Python - Fatal编程技术网

Python 重复索引给定次数

Python 重复索引给定次数,python,Python,基本上,我有: 给出索引“I”的数组,例如(1,2) 以及相同长度的列表,给出相应的重复次数“N”,例如[1,3] 我想创建一个数组,包含我重复N次的索引,也就是这里的(1,2,2,2),其中1重复一次,2重复3次 我提出的最佳解决方案使用了np.repeat和np.concatenate函数: import numpy as np list_index = np.arange(2) list_no_repetition = [1, 3] result = np.concatenate(

基本上,我有:

  • 给出索引“I”的数组,例如(1,2)
  • 以及相同长度的列表,给出相应的重复次数“N”,例如[1,3]
我想创建一个数组,包含我重复N次的索引,也就是这里的(1,2,2,2),其中1重复一次,2重复3次

我提出的最佳解决方案使用了np.repeat和np.concatenate函数:

import numpy as np

list_index = np.arange(2)
list_no_repetition = [1, 3]

result = np.concatenate([np.repeat(index, no_repetition)
                         for index, no_repetition in zip(list_index, list_no_repetition)])
print(result)
我想知道是否有“更漂亮的”/“更有效的解决方案”


谢谢您的帮助。

不确定是否有更漂亮的,但您可以通过列表理解完全解决它:

[x for i,l in zip(list_index, list_no_repetition) for x in [i]*l]

不确定是否更漂亮,但您可以通过列表理解完全解决它:

[x for i,l in zip(list_index, list_no_repetition) for x in [i]*l]

您好,这是我建议的备选方案:

import numpy as np

list_index = np.arange(2)
list_no_repetition = [1, 3]

result = np.array([])
for i in range(len(list_index)):
  tempA=np.empty(list_no_repetition[i])
  tempA.fill(list_index[i])
  result = np.concatenate([result, tempA])

result

您好,这是我建议的备选方案:

import numpy as np

list_index = np.arange(2)
list_no_repetition = [1, 3]

result = np.array([])
for i in range(len(list_index)):
  tempA=np.empty(list_no_repetition[i])
  tempA.fill(list_index[i])
  result = np.concatenate([result, tempA])

result

您还可以使用一个字典,其中key作为索引,value作为重复次数。我认为安德烈亚斯对这份清单的理解是正确的

import numpy as np

repeatdict = {
    1:1,
    2:3,
    3:6
}

result = [x for key, value in repeatdict.items() for x in [key]*value]

print(result)
# 820 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit by_range(li_2, lnr_2)

您还可以使用一个字典,其中key作为索引,value作为重复次数。我认为安德烈亚斯对这份清单的理解是正确的

import numpy as np

repeatdict = {
    1:1,
    2:3,
    3:6
}

result = [x for key, value in repeatdict.items() for x in [key]*value]

print(result)
# 820 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit by_range(li_2, lnr_2)
如果“效率”是指速度,则可以使用
timeit
。下面是一些任意、较大数据的结果

首先,定义函数和数据:

#生成一些数据(列出值/索引和重复次数)
N=1000
li_2=np.arange(N)
lnr_2=np.random.randint(低=0,高=10,大小=N)
#三个函数产生相同的结果
def按范围(项目、报告):
x=np.full(总和,np.nan)
i=0
对于val,zip中的代表(项目、代表):
x[i:i+reps]=val
i=i+reps
返回x
由公司提供的def(项目、代表):
返回np.数组([val代表val,zip中的代表(项目,代表)代表范围(代表)])
按类别定义(列表索引,列表不重复):
返回np.concatenate([np.repeat(索引,无重复)
对于索引,zip中无重复(列表索引,列表无重复)])
大致相同的速度:首先分配一个数组,然后填充它,而不是为了理解而做一行双精度运算

import numpy as np

repeatdict = {
    1:1,
    2:3,
    3:6
}

result = [x for key, value in repeatdict.items() for x in [key]*value]

print(result)
# 820 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit by_range(li_2, lnr_2)
最初的连接方法稍微慢一点:

# 2.19 ms ± 98.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit by_cat(li_2, lnr_2)
请注意,结果将因运行位置/方式以及处理的特定数据而异。

如果“效率”指的是速度,则可以使用
timeit
。下面是一些任意、较大数据的结果

首先,定义函数和数据:

#生成一些数据(列出值/索引和重复次数)
N=1000
li_2=np.arange(N)
lnr_2=np.random.randint(低=0,高=10,大小=N)
#三个函数产生相同的结果
def按范围(项目、报告):
x=np.full(总和,np.nan)
i=0
对于val,zip中的代表(项目、代表):
x[i:i+reps]=val
i=i+reps
返回x
由公司提供的def(项目、代表):
返回np.数组([val代表val,zip中的代表(项目,代表)代表范围(代表)])
按类别定义(列表索引,列表不重复):
返回np.concatenate([np.repeat(索引,无重复)
对于索引,zip中无重复(列表索引,列表无重复)])
大致相同的速度:首先分配一个数组,然后填充它,而不是为了理解而做一行双精度运算

import numpy as np

repeatdict = {
    1:1,
    2:3,
    3:6
}

result = [x for key, value in repeatdict.items() for x in [key]*value]

print(result)
# 820 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit by_range(li_2, lnr_2)
最初的连接方法稍微慢一点:

# 2.19 ms ± 98.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit by_cat(li_2, lnr_2)

请注意,结果将根据您运行此操作的位置/方式以及您正在处理的特定数据而有所不同。

Does/questions/38663470/根据模式numpy help重复数字?@neozen欢迎使用Stackoverflow。如果下面给出的任何答案帮助您解决了问题,那么您可以接受最适合您问题的答案。请检查Does/questions/38663470/根据模式重复数字numpy help?@neozen欢迎使用Stackoverflow。如果下面给出的任何答案帮助您解决了问题,那么您可以接受最适合您问题的答案。请检查,谢谢您的回答!我在找一些东西,谢谢你的回答!我在找一些