![](/img/trans.png)
[英]What is the difference between numpy.array([]) and numpy.array([[]])?
[英]Difference between a numpy.array and numpy.array[:]
又是我... :)
我試圖找到這個問題的答案,但我仍然不夠幸運。 就是這樣
調用一個numpy數組(比如說“ iris”)和該數組中的整個數據組(例如通過使用iris [:])有什么區別?
我之所以這樣問,是因為我在運行第一個示例(如下)時遇到錯誤,而第二個示例運行良好。
這是代碼:
在第一部分中,我加載了庫並從Internet導入了數據集。
import statsmodels.api as sm
iris = sm.datasets.get_rdataset(dataname='iris',
package='datasets')['data']
如果我運行此代碼,則會收到錯誤消息:
iris.columns.values = [iris.columns.values[x].lower() for x in range( len( iris.columns.values ) ) ]
print(iris.columns.values)
現在,如果我運行此代碼,它將正常工作:
iris.columns.values[:] = [iris.columns.values[x].lower() for x in range( len( iris.columns.values ) ) ]
print(iris.columns.values)
最好的祝福,
區別在於,當您執行iris.columns.values = ...
您嘗試替換被保護的iris.columns
中values
屬性的引用(請參閱pandas.core.frame.DataFrame
pandas實現)以及執行該操作時iris.columns.values[:] = ...
您訪問np.ndarray
的數據並將其替換為新值。 在第二個賦值語句中,您不會覆蓋對numpy對象的引用。 [:]
是一個slice
對象,傳遞給numpy數組的__setitem__
方法。
編輯 :
此類屬性的確切實現(有多個,這里是pd.Series
實現)是:
@property
def values(self):
""" return the array """
return self.block.values
因此,您嘗試覆蓋由裝飾器 @property
后接getter函數構造的屬性,並且該屬性只能由getter而不是setter提供,因此無法替換。 請參閱關於buildins的Python文檔-property()
iris.columns.values = val
電話
type(iris.columns).__setattr__(iris.columns, 'values', val)
這正在運行pandas
的代碼,因為type(iris.columns)
是pd.Series
iris.columns.values[:] = val
電話
type(iris.columns.value).__setitem__(iris.columns.value, slice(None), val)
這正在運行numpy
的代碼,因為type(iris.columns.value)
是np.ndarray
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.