目前我有一個具有形狀(33,)的元素X.我想將其改爲(33,501),因爲我知道每行都有501個元素。鐵。 X[0] = [0, 1, 0, 0, .. 0, 1]
我試過Python - 更改對象形狀?
np.reshape(X, (33,501))
但它的錯誤與ValueError: total size of new array must be unchanged
。即使每行都是501長。
目前我有一個具有形狀(33,)的元素X.我想將其改爲(33,501),因爲我知道每行都有501個元素。鐵。 X[0] = [0, 1, 0, 0, .. 0, 1]
我試過Python - 更改對象形狀?
np.reshape(X, (33,501))
但它的錯誤與ValueError: total size of new array must be unchanged
。即使每行都是501長。
要從開始的結構不是2-d陣列但含有列表作爲其元素的1 d陣列。這看起來可能相似,但實際上完全不同。
一個典型的(有例外)m×n數組是一個mn元素的線性塊,還有一些允許numpy以正確的方式解釋索引的「元數據」(像[i,j])。
相比之下,您的數組是一個1d的對象引用塊(c語言中的指針),因此如果要解析單個元素,則會添加另一個間接級別。首先檢索列表,然後檢索其元素。
陣列不提供適當的numpy數組所提供的大部分便利性和速度改進,所以最好將其轉換。
通常,np.array
工廠將兼容長度的嵌套序列轉換爲儘可能深的數組。你的情況是個例外,因爲在技術上它已經是一個數組,所以np.array
只是淺拷貝它(它複製列表引用而不是列表本身),包括形狀。
繞過的一個方法是將之前投放到列表:
np.array(list(original_array))
我的猜測是你有一個列表,其中有33個列表,其中501長。
你可以將它轉換爲2維數組(矩陣)或數據框,可以用幾種不同的方式完成;一個簡單的一個將是:
df = pd.DataFrame([])
counter = 0
for array in X:
df['column_%d' %counter] = array
counter = counter + 1
'X'沒有任何「行」,它的形狀是'(33)'...顯然你是錯誤。 –
什麼類型是'X'和'X [0]'?可能工作的是'X = np.array(X)' –
'X.dtype'返回'dtype('O')','X [0]'是一個列表。 –