【发布时间】:2021-04-22 03:26:46
【问题描述】:
我有一个具有这种形状的特征表(3d numpy 数组):
characteristics = np.array((140, 401,9))
并有一个包含 140 个元素的最终一维数组:
final_array = np.array(140)
现在,我需要使用 3 个条件来检索特征并将它们添加到 final_array。
1- 将添加特征表中第一个维度中的哪些元素。示例:
which_elements = [True True False ... False True] # (140 elements)
所以现在我们知道我们只会使用第一个、第二个和最后一个元素的特性来添加到最终数组中。
2- 特征数组中的每个元素都是一个 (401x9) 表,我们需要通过匹配其行和列来检索单个值。 示例:
rows = [56 78 0 ... 0 43] # (140 elements)
意味着对于第一个元素,我们检索第 56 行,第二个元素第 78 行,第三个元素不会被使用...最后一个元素第 43 行。
columns = [8 7 0 ... 0 4]# (140 elements)
表示对于第一个元素,我们检索第 8 列,第二个元素第 7 列,第三个元素不会被使用...最后一个元素第 4 列。
检索到正确的值,我会将它们添加到 final_array 中。
我知道如何进行这种迭代,逐个元素地在特征表中搜索,但我需要它是一个快速操作,因为它每秒会完成超过一百万次,我很难做到这一点numpy 中的布尔索引。有什么建议吗?
编辑 - 尝试 TOMÁS VALLOTTON 答案:
import numpy as np
characteristics = np.array([[[500, 480], [480, 460]], [[460, 440], [440, 420]], [[420, 400], [400, 380]]])
print(characteristics)
final_array = np.zeros(3)
which = np.array([True, False, True])
rows = [0, 0, 1]
columns = [1, 0, 0]
expected_final_array = [480., 0., 400.]
# Tomás Valloton
array = np.where(which, characteristics[:, rows, columns], np.inf)
print(array[array != np.inf])
Output:
[480. 480. 440. 440. 400. 400.]
【问题讨论】:
标签: python arrays numpy multidimensional-array conditional-statements