簡體   English   中英

在for循環中檢查numpy數組的尺寸,然后將2D數據轉換為1D數據

[英]Check dimensions of numpy array in a for loop and then turn 2-D data into 1-D data

我正在使用polyfit函數將趨勢線添加到數據集中。 由於我有很多數據集(比這里找到的四個示例要多得多),所以我想進行一個for循環以檢查數據的維度-眾所周知,polyfit函數僅接受1- D數據。 我使用np.ravel()新手方法是這樣的:

import numpy as np

data_a = np.array([1, 2, 3, 4, 5, 6])
data_b = np.array([10, 20, 30, 40, 50, 60])
data_c = np.transpose(np.array([[1, 2, 3, 4, 5, 6]]))
data_d = np.array([[10, 20, 30, 40, 50, 60]])


for items in (data_a, data_b, data_c, data_d):
    if items.ndim == 1:
        print('It is an 1-D array -- no action needed.')
        print(items.ndim)
    elif items.ndim == 2:
        print('It is an 2-D array, please do not be alarmed, I will convert it for you.')
        items.ravel()
        print(items.ndim)
    else:
        print('It contains more than two dimensions.')

print(data_a.ndim)
print(data_b.ndim)
print(data_c.ndim)
print(data_d.ndim)

如果我在for循環外的任何數據集上使用過np.ravel() ,則它的工作原理與預期的一樣。 例如:

data_c_2 = data_c.ravel()
data_d_2 = data_d.ravel()

但是由於我有很多數據集,所以(在我看來,也許是愚蠢的頭腦中)最好在檢查維度時對其進行迭代。

如果有人能找到時間幫助我,我將不勝感激。 如果有人可以解釋我在for循環中做錯的事情,以便對它有更好的了解,我也將不勝感激。

謝謝。

對於一個。 items.ravel()返回一個新數組。 在循環之外,您可以使用類似:

data = data.ravel()

您無法在循環內部執行此操作,因為您將僅更改循環變量。 如果要“就地” np.resize ,可以使用docs中的 np.resize

就地更改數組的形狀和大小。

因此,只需替換:

items.ravel()

有:

items.resize(items.size)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM