我有一个大小为A
的值数组[1, x]
和一个索引为B
(y> x)的数组[1, y]
(对应于数组{{1}) }。因此,我想要一个大小为A
的数组C
,并填充了[1,y]
的值。
以下是输入和输出的示例:
A
我当然可以这样解决:
>>> A = [6, 7, 8]
>>> B = [0, 2, 0, 0, 1]
>>> C = #Some operations
>>> C
[6, 8, 6, 6, 7]
但是实际上我被认为是更好的方法。特别是因为我想将其用作另一个函数的参数。看起来像>>> C = []
>>> for val in B:
>>> C.append(A[val])
(但有效的表达式)的表达式将是理想的。我不介意使用A[B]
或numpy
答案 0 :(得分:1)
要获取多个项目,operator.itemgetter
很方便:
from operator import itemgetter
A = [6, 7, 8]
B = [0, 2, 0, 0, 1]
itemgetter(*B)(A)
# (6, 8, 6, 6, 7)
也正如您所提到的numpy
,这可以通过按指定的索引索引数组来直接完成,即A[B]
:
import numpy as np
A = np.array([6, 7, 8])
B = np.array([0, 2, 0, 0, 1])
A[B]
# array([6, 8, 6, 6, 7])
另一种选择是使用np.take
:
np.take(A,B)
# array([6, 8, 6, 6, 7])
答案 1 :(得分:1)
简单的列表理解功能:
A = [6, 7, 8]
B = [0, 2, 0, 0, 1]
C = [A[i] for i in B]
print(C)
这产生
[6, 8, 6, 6, 7]
答案 2 :(得分:0)
您可以通过列表理解来做到这一点:
>>> A = [6, 7, 8]
>>> B = [0, 2, 0, 0, 1]
>>> C = [A[x] for x in B]
>>> print(C)
[6, 8, 6, 6, 7]
答案 3 :(得分:0)
我认为您需要一个生成器(列表理解):
A = [1, 2, 3]
B = [0, 2, 0, 0, 1]
C = [A[i] for i in B]
答案 4 :(得分:0)
一旦使用numpy.array
,您就可以使用期望的语法来完成所需的工作:
>>> a = array([6, 7, 8])
>>> b = array([0, 2, 0, 0, 1])
>>> a[b]
array([6, 8, 6, 6, 7])
答案 5 :(得分:0)
这是使用numpy ndarrays的一种方法:
import numpy as np
A = [6, 7, 8]
B = [0, 2, 0, 0, 1]
C = list(np.array(A)[B]) # No need to convert B into an ndarray
# list() is for converting ndarray back into a list,
# (if that's what you finally want)
print (C)
说明
给出一个numpy ndarray(np.array(A)
),我们可以使用
整数数组(恰好是您的首选)
解决方案的形式是:)用于的整数数组
索引到ndarray,不必是另一个ndarray。它甚至可以
成为列表,并且也很适合我们,因为B
出现在列表上。所以,
我们拥有的是:
np.array(A)[B]
这样的索引结果将是另一个ndarray,具有 与索引数组具有相同的形状(尺寸)。因此,在我们的情况下 我们正在使用整数索引列表对ndarray进行索引, 该索引的结果将是该对象的一维ndarray 与索引列表的长度相同。
最后,如果我们想将上述结果转换为
一维ndarray返回列表,我们可以将其作为
list()
的参数:
list(np.array(A)[B])