我有一個這樣的清單,
mylist = [
np.array([48.5, 38.0, 40.0]),
np.array([61.5, 52.5, 55.5, 46.5]),
np.array([35.5, 36.5]),
]
我想找到陣列的索引,以及陣列中特定值的位置以及 mylist 中的值。
我能夠完成最后一列,np.concatenate(mylist)但不知道如何有效地處理其余部分。
expected = np.vstack(
(
np.array([0, 0, 0, 1, 1, 1, 1, 2, 2]),
np.array([0, 1, 2, 0, 1, 2, 3, 0, 1]),
np.array([48.5, 38.0, 40.0, 61.5, 52.5, 55.5, 46.5, 35.5, 36.5]),
)
).T
它可以讀作即 38 在第一個陣列中(索引 = 0),它是該陣列的第二個元素(索引 = 1)。
uj5u.com熱心網友回復:
這可以滿足您的要求,如果這真的是您想要的。
import numpy as np
mylist = [
np.array([48.5, 38. , 40. ]),
np.array([61.5, 52.5, 55.5, 46.5 ]),
np.array([35.5, 36.5])]
a1 = []
a2 = []
for i,l in enumerate(mylist):
a1.extend( [i] * len(l) )
a2.extend( list(range(len(l))) )
final = np.array( [a1, a2, np.concatenate(mylist)] ).T
print(final)
輸出:
[[ 0. 0. 48.5]
[ 0. 1. 38. ]
[ 0. 2. 40. ]
[ 1. 0. 61.5]
[ 1. 1. 52.5]
[ 1. 2. 55.5]
[ 1. 3. 46.5]
[ 2. 0. 35.5]
[ 2. 1. 36.5]]
uj5u.com熱心網友回復:
您可以使用mapwithlen來找出mylist. 然后使用它np.repeat來獲得“X”坐標。現在,應用np.arange在每個長度上以獲得“Y”坐標并使用np.hstack. 現在,只是np.column_stack他們在一起。
lens = list(map(len, mylist))
idx0 = np.repeat(np.arange(len(mylist)), lens) # [0, 0, 0, 1, 1, 1, 1, 2, 2]
idx1 = np.hstack([np.arange(v) for v in lens]) # [0, 1, 2, 0, 1, 2, 3, 0, 1]
vals = np.hstack(mylist) # [48.5, 38. , 40. , 61.5, 52.5, 55.5, 46.5, 35.5, 36.5]
out = np.column_stack([idx0, idx1, vals])
print(out)
[[ 0. 0. 48.5]
[ 0. 1. 38. ]
[ 0. 2. 40. ]
[ 1. 0. 61.5]
[ 1. 1. 52.5]
[ 1. 2. 55.5]
[ 1. 3. 46.5]
[ 2. 0. 35.5]
[ 2. 1. 36.5]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370335.html
