python - 在 Python/Numpy 中一次分配多个数组索引

标签 python numpy

我正在寻找快速(希望没有 for 循环)生成一个 Numpy 数组的形式:

array([a,a,a,a,0,0,0,0,0,b,b,b,0,0,0, c,c,0,0....])

其中 a、b、c 和其他值在不同的点重复,用于不同的范围。我真的在想这样的事情:

import numpy as np
a = np.zeros(100)
a[0:3,9:11,15:16] = np.array([a,b,c])

这显然行不通。有什么建议吗?

编辑(jterrace 回答了原来的问题): 数据以 N*M Numpy 数组的形式出现。每行大部分是零,偶尔散布着非零数字序列。 我想用序列的最后一个值替换每个这样的序列的所有元素。我会采取任何快速的方法来做到这一点!使用 where 和 diff 几次,我们可以获得每次运行的开始和停止索引。

raw_data = array([.....][....])
starts = array([0,0,0,1,1,1,1...][3, 9, 32, 7, 22, 45, 57,....])
stops = array([0,0,0,1,1,1,1...][5, 12, 50, 10, 30, 51, 65,....])
last_values = raw_data[stops]
length_to_repeat = stops[1]-starts[1]

请注意,starts[0] 和 stops[0] 是相同的信息(运行发生在哪一行)。在这一点上,由于我知道的唯一路线是 jterrace 建议的路线,我们需要通过一些扭曲来获得类似的零开始/停止位置,然后将零开始/停止与值开始/停止交错,并将数字 0 与 last_values 数组交错。然后我们遍历每一行,做类似的事情:

for i in range(N)
    values_in_this_row = where(starts[0]==i)[0]
    output[i] = numpy.repeat(last_values[values_in_this_row], length_to_repeat[values_in_this_row])

这有意义吗,还是我应该再解释一下?

最佳答案

如果您有完整指定的值和重复计数,您可以这样做:

>>> import numpy
>>> values = numpy.array([1,0,2,0,3,0])
>>> counts = numpy.array([4,5,3,3,2,2])
>>> numpy.repeat(values, counts)
array([1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 3, 3, 0, 0])

关于python - 在 Python/Numpy 中一次分配多个数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085627/

相关文章:

python - 以最小速率 reshape numpy 数组

python : "IndexError: invalid index into a 0-size array"

python - 按每个元素的第一个字符拆分列表

python - 从 raw_input 读取并运行函数调用

python - 如何将另一个 DataFrame 的值添加到列匹配的行中?

python - Scipy.optimize.fmin powell 直接参数语法

python - 如何在 sqlalchemy 中连接两个关于公共(public)关系的查询?

python - 将 Azure 服务管理与 python sdk 连接

python - 从 IronPython 使用 NumPy 和 SciPy 的 final方法

python - 如何查找特定值的列号以及该位置的 CSV 文件