我有一個 2D numpy 陣列。我想切出長度不等的列子集,并將它們放在一個陣列中,其余值由nan. 也就是說在:
data = np.random.normal(size=(100,4))
我想從頭到尾索引[75, 33, 42, 54]。也就是說索引從 75 到第 0 列的末尾,第 33 行到第 1 列的末尾等等。
我試過data[[slice(75,100),slice(33,100)],:]了,但沒有用。
uj5u.com熱心網友回復:
這個對我有用:
data = np.random.normal(size=(100,4))
slices_values = [75, 33, 42, 54] # You name your slices here
slices = [] # In this list you will keep the slices
for i in slices_values:
x = slice(i, 100)
slices.append(data[x])
現在您可以確認每個切片的形狀:
slices[0].shape # (25, 4)
slices[1].shape # (67, 4)
slices[2].shape # (58, 4)
slices[3].shape # (46, 4)
uj5u.com熱心網友回復:
很難找出預期的結果,但如果是 IIUC,我們需要創建一個陣列并使用回圈填充它:
data = np.random.normal(size=(5, 4))
ids = np.array([2, 1, 2, 3])
def test(data, ids):
arr = np.empty_like(data)
for i, j in enumerate(ids):
arr[:j, i] = data[:j, i]
arr[j:, i] = np.nan
return arr
res = test(data, ids)
# [[ 0.1768507210788626 2.3777541249700573 0.998732857053734 -1.3101507969798436 ]
# [ 0.18018992116935298 nan -1.443125868756967 -1.3992855573400653 ]
# [ nan nan nan -0.2319322879433409 ]
# [ nan nan nan nan]
# [ nan nan nan nan]]
或者:
def test(data, ids):
arr = np.empty_like(data)
for i, j in enumerate(ids):
arr[:j, i] = np.nan
arr[j:, i] = data[j:, i]
return arr
# [[ nan nan nan nan]
# [ nan -1.7647540193678475 nan nan]
# [ 0.8203539992532282 1.2952993197746814 0.9421974218807785 nan]
# [-0.6313979666045816 -0.6421770233773478 -0.3816716009896775 -1.7634440039930654]
# [ 1.611668212682313 -0.878108388861928 -0.4985770669099582 0.9072434022928676]]
uj5u.com熱心網友回復:
您可以通過創建相同尺寸的掩碼來做到這一點,其中包含True您想要的索引np.nan,False否則:
import numpy as np
data = np.random.normal(size=(5,4))
b = np.array([0, 1, 2, 3])
mask = np.arange(len(data))[:, None] < b
data[mask] = np.nan
data
輸出:
array([[-0.53306108, nan, nan, nan],
[ 1.32282687, 0.83204007, nan, nan],
[-1.07143908, 0.12972517, -0.4783274 , nan],
[ 0.39686727, -1.20532247, -2.17043218, 0.74859079],
[ 1.82548696, 0.98669461, -1.17961517, -0.7813723 ]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504379.html
上一篇:如何從當前日期獲取兩個月前的日期
