python - Python用从索引到另一个的值填充数组
问题描述
我有 3 个一维列表。
repetitions= [2, 1, 1, 3, 1, 1, 1, 1, 2, 1]
start = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
end = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
我想使用重复列表从start[i]到end[i]填充 2D 输出 np.array 。
例如,假设我的输出数组的形状为 (150,10),其中填充了零。
Output = [
[0,0,0,0,0,0,0,0,0,0] #0
[0,0,0,0,0,0,0,0,0,0] #1
[0,0,0,0,0,0,0,0,0,0] #2
[0,0,0,0,0,0,0,0,0,0] #3
[0,0,0,0,0,0,0,0,0,0] #4
[0,0,0,0,0,0,0,0,0,0] #5
[0,0,0,0,0,0,0,0,0,0] #6
[0,0,0,0,0,0,0,0,0,0] #7
[0,0,0,0,0,0,0,0,0,0] #8
[0,0,0,0,0,0,0,0,0,0] #9
[0,0,0,0,0,0,0,0,0,0] #10
[0,0,0,0,0,0,0,0,0,0] #11
[0,0,0,0,0,0,0,0,0,0] #12
[0,0,0,0,0,0,0,0,0,0] #13
[0,0,0,0,0,0,0,0,0,0] #14
...
]
首先,我必须迭代重复列表以获取迭代开始和结束列表的次数,并获取行和列索引以填充输出数组。
例如,重复列表的第一列(索引为 0的列)等于2 ,那么我将不得不迭代开始和结束列表2次并填充输出数组,首先,从行索引(start[0]= =10 ) 到行end[0]==20的列索引索引 0(这是重复列表中重复值 2 的索引),值为 1。
然后从索引 0处的start[1]到end[2]也具有值 1。
第一次迭代的输出数组将是这样的:
Output = [
[0,0,0,0,0,0,0,0,0,0] #0
[0,0,0,0,0,0,0,0,0,0] #1
[0,0,0,0,0,0,0,0,0,0] #2
[0,0,0,0,0,0,0,0,0,0] #3
[0,0,0,0,0,0,0,0,0,0] #4
[0,0,0,0,0,0,0,0,0,0] #5
[0,0,0,0,0,0,0,0,0,0] #6
[0,0,0,0,0,0,0,0,0,0] #7
[0,0,0,0,0,0,0,0,0,0] #8
[0,0,0,0,0,0,0,0,0,0] #9
[1,0,0,0,0,0,0,0,0,0] #10
[1,0,0,0,0,0,0,0,0,0] #11
[1,0,0,0,0,0,0,0,0,0] #12
[1,0,0,0,0,0,0,0,0,0] #13
[1,0,0,0,0,0,0,0,0,0] #14
[1,0,0,0,0,0,0,0,0,0] #15
[1,0,0,0,0,0,0,0,0,0] #16
[1,0,0,0,0,0,0,0,0,0] #17
[1,0,0,0,0,0,0,0,0,0] #18
[1,0,0,0,0,0,0,0,0,0] #19
[1,0,0,0,0,0,0,0,0,0] #20
...
]
然后重复列表的第二列(索引为 1的列)等于1然后我将不得不迭代开始和结束列表1次并填充输出数组,从行索引(start[1]==20)到列索引索引 1(即重复列表中重复值 1 的索引)处的行end[1]==30 ,值为 1。依此类推。
第二次迭代的输出数组将是这样的:
Output = [
...
[1,0,0,0,0,0,0,0,0,0] #10
[0,0,0,0,0,0,0,0,0,0] #11
[0,0,0,0,0,0,0,0,0,0] #12
[0,0,0,0,0,0,0,0,0,0] #13
[0,0,0,0,0,0,0,0,0,0] #14
[0,0,0,0,0,0,0,0,0,0] #15
[0,0,0,0,0,0,0,0,0,0] #16
[0,0,0,0,0,0,0,0,0,0] #17
[0,0,0,0,0,0,0,0,0,0] #18
[0,0,0,0,0,0,0,0,0,0] #19
[0,1,0,0,0,0,0,0,0,0] #20
[0,1,0,0,0,0,0,0,0,0] #21
[0,1,0,0,0,0,0,0,0,0] #22
[0,1,0,0,0,0,0,0,0,0] #23
[0,1,0,0,0,0,0,0,0,0] #24
[0,1,0,0,0,0,0,0,0,0] #25
[0,1,0,0,0,0,0,0,0,0] #26
[0,1,0,0,0,0,0,0,0,0] #27
[0,1,0,0,0,0,0,0,0,0] #28
[0,1,0,0,0,0,0,0,0,0] #29
[0,1,0,0,0,0,0,0,0,0] #30
...
]
这是我尝试过的,但我很困惑:
Output=np.zeros((150, 10))
for i in range(len(start)):
for j in range(10):
ms = repetions[i][j]
for p in range(ms):
Output[start[i]:end[i], p]=1
解决方案
没有 Numpy
repetitions= [2, 1, 1, 3, 1, 1, 1, 1, 2, 1]
start = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
end = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
x=10
imax=150
Output=[[0]*x]*imax
for i in range(len(start)):
sample=[0]*x
sample[repetitions[i]]=1
for p in range(end[i]-start[i]):
Output[start[i]+p]=sample
也许你应该在范围内有end[i]-start[i]
推荐阅读
- java - 将 AWS Lambda 函数放入 VPC,然后“IOException: Connection reset by peer”开始发生,但只是偶尔发生
- python - 使用 Python 格式化日期(例如 2020 年 1 月 2 日)
- python - 在烧瓶中仅加载一次预训练模型
- python-3.x - 熊猫 groupby / 应用修改列
- azure-pipelines - 如何在 Azure Pipelines 中重置计数器变量?
- ios - VS 代码调试不适用于模拟的 IOS 设备
- javascript - 通过 dropzone.js 传递索引和调用函数
- amazon-dynamodb - 从自定义 Lambda 引用 Amplify 的 @model DynamoDB 表
- python - BAT:如何运行 Python 脚本并在 1 小时后重新启动进程
- ruby-on-rails - 如何在 Rails 中创建记录时拍摄关联数据的快照?