我有超過 100 萬行(準確地說是 1,125,000)和 150 列的 numpy 陣列。我希望能夠為它的所有列提取該陣列的某些部分,但只提取某些行。例如,第一個子集陣列 (df) 具有原始大陣列的所有列但僅包含 (:, 56:67, 56:67) [基本上所有第一個維度中的 50 個,但對于 i 和j 維,僅選擇其中的 56 到 68 個切片,當重新整形為 numpy 3d 陣列時,這將是每列的 50 乘以 11 乘以 11 = 6050]。考慮到我原始 bdata 的大小(1125000、150),是否有任何 pythonic 方式來執行此類操作?
下面是我的示例 3 列陣列的示例代碼:
import numpy as np
import pandas as pd
data_1 = np.random.random((50,150, 150))
data_2 = np.random.random((50,150, 150))
data_3 = np.random.random((50,150, 150))
big_array = np.concatenate((data_1, data_2, data_3), axis=1).reshape(1125000, 3)
df= pd.DataFrame()
for i in range(big_array.shape[1]):
df_1 = big_array[:,i]
print(df_1.shape)
df_1 = df_1.reshape(50, 150, 150)
df_1 = df_1[:, 56:67, 56:67].reshape(-1)
print(df_1.shape)
df_2 = pd.DataFrame(df_1)
df_2[i] = df_2
print(df_2.shape)
#df = pd.concat([df_2[i]], axis=1)
df = df.append(df_2[i])
print(i)
df.T

uj5u.com熱心網友回復:
IIUC,看起來您可以重塑形狀,使big_array您的形狀為(50,150, 150,3),因此最后一個維度是big_array實際情況下的列數或 150,但您也可以使用big_array.shape[1]。然后使用您在回圈中執行的相同切片選擇您想要的所有資料,除了在最后一個維度中獲取所有資料。然后reshape再次獲得 X 行和 3(或big_array.shape[1])列。所以像。
res = pd.DataFrame(big_array.reshape(50, 150, 150,big_array.shape[1])[:,56:67, 56:67,:]
.reshape(-1,big_array.shape[1]))
我用我的亂數進行了測驗并np.allclose(df.T,res)給出了 True (df用你的回圈方法創建的地方)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528658.html
標籤:Python熊猫麻木的
上一篇:將陣列作為引數傳遞python
