我正在研究我的numpy HW。对于这个问题,我必须找到1999年之后发布的相机中的最大重量(第3列)(第2列),并返回其productID(第1列)。
所以,我的方法是获得
import numpy as np
data = np.array([[1,2000,143,4546],[2,1999,246,],[3,2008,190,0],[4,2000,100,]])
no_nan = np.nan_to_num(data) # all nan to zeros
new_cameras = no_nan[:, 1]>1999 # get the array of cameras after 1999 (1 column was released day)
heavy = np.nanargmax(new_cameras, axis = 0)
我被困在这里。 如果有人可以提供帮助,我会很棒。
答案 0 :(得分:2)
鉴于如果在该输入数组中每个列表的元素数量可变,那么我们需要求助于循环理解 -
data[np.nanargmax([d[2] if d[1]>1999 else np.nan for d in data])][0]
示例运行 -
In [66]: data = np.array([[1,2000,143,4546],[2,1999,246,],[3,2008,190,0],[4,2000,100,]])
In [67]: data[np.nanargmax([d[2] if d[1]>1999 else np.nan for d in data])][0]
Out[67]: 3
答案 1 :(得分:1)
使用您的示例并分解为步骤:
no_nan = np.array([[ 1, 2000, 143, 4546],
[ 2, 1999, 246, 0],
[ 3, 2008, 190, 0],
[ 4, 2000, 100, 0]])
# Constrict the array to dates > 1999
filtered = no_nan[no_nan[:, 1]>1999]
# Our productIDs from the filtered array
ids = filtered[:, 0]
# The location of the max
loc = filtered[:, 2].argmax()
# The resulting product id
print(ids[loc])
3