我有一個很大的 numpy 陣列,想拆分它。我已閱讀此解決方案,但對我沒有幫助。目標列可以有多個值,但我知道要根據哪個值來拆分它。在我的簡化示例中,目標列是第三列,我想根據 value 拆分它2.。這是我的陣列。
import numpy as np
big_array = np.array([[0., 10., 2.],
[2., 6., 2.],
[3., 1., 7.1],
[3.3, 6., 7.8],
[4., 5., 2.],
[6., 6., 2.],
[7., 1., 2.],
[8., 5., 2.1]])
具有此值 ( 2.) 的行進行一次拆分。然后,下一行(第三和第四)不是2.,再做一個。再次出現在我的資料集我看到這個值(2.),并分割了出來,并再次我一直不2.值(最后一行)作為另一個分裂。最終結果應如下所示:
spl_array = [np.array([[0., 10., 2.],
[2., 6., 2.]]),
np.array([[3., 1., 7.1],
[3.3, 6., 7.8]]),
np.array([[4., 5., 2.],
[6., 6., 2.],
[7., 1., 2.]]),
np.array([[8., 5., 2.1]])]
在此之前,我非常感謝任何幫助。
uj5u.com熱心網友回復:
首先,您找到所有包含 2 或不包含 2 的陣列。該陣列將充滿 True 和 False 值。將此陣列轉換為具有 0 和 1 的陣列。檢查哪里有差異(例如[0, 0, 1, 1, 0]:0, 1, 0, -1.
根據更改,可以使用 numpy where 查找這些值的索引。
插入索引 0 和大陣列的最后一個索引,這樣您就可以將它們壓縮到左右切片中。
import numpy as np
big_array = np.array([[0., 10., 2.],
[2., 6., 2.],
[3., 1., 7.1],
[3.3, 6., 7.8],
[4., 5., 2.],
[6., 6., 2.],
[7., 1., 2.],
[8., 5., 2.1]])
idx = [2 in array for array in big_array]
idx *= np.ones(len(idx))
slices = list(np.where(np.diff(idx) != 0)[0] 1)
slices.insert(0,0)
slices.append(len(big_array))
result = list()
for left, right in zip(slices[:-1], slices[1:]):
result.append(big_array[left:right])
'''
[array([[ 0., 10., 2.],
[ 2., 6., 2.]]),
array([[3. , 1. , 7.1],
[3.3, 6. , 7.8]]),
array([[4., 5., 2.],
[6., 6., 2.],
[7., 1., 2.]]),
array([[8. , 5. , 2.1]])]
'''
uj5u.com熱心網友回復:
你可以這樣做 numpy
np.split(
big_array,
np.flatnonzero(np.diff(big_array[:,2] == 2) != 0) 1
)
輸出
[array([[ 0., 10., 2.],
[ 2., 6., 2.]]),
array([[3. , 1. , 7.1],
[3.3, 6. , 7.8]]),
array([[4., 5., 2.],
[6., 6., 2.],
[7., 1., 2.]]),
array([[8. , 5. , 2.1]])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417917.html
標籤:
