淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別
這兩組函數(shù)中區(qū)別很是類似,都是一個(gè)不改變之前的數(shù)組,一個(gè)改變數(shù)組本身
resize和reshape
>>> import numpy as np >>> a = np.arange(20).reshape(4,5) >>> a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) >>> a.reshape(2,10) array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]) >>> a array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) >>> a.resize(2,10) >>> a array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
兩個(gè)函數(shù)都是改變數(shù)組的形狀,但是resize是在本身上進(jìn)行操作,reshape返回的是修改之后的參數(shù)
ravel和flatten
兩者都可以將數(shù)組轉(zhuǎn)換為一個(gè)維,
flatten(order='C')
參數(shù):{‘C',‘F',‘A',‘K'}
默認(rèn)情況下‘C'以行為主的順序展開,‘F'(Fortran風(fēng)格)意味著以列的順序展開,‘A'表示如果a在內(nèi)存中為Fortran連續(xù),則按列展開,否則以行展開,‘K'按照元素在內(nèi)存中出現(xiàn)的順序展平a。
>>> a = np.arange(6).reshape(2,3)
>>> a.flatten()
array([0, 1, 2, 3, 4, 5])
>>> a.ravel()
array([0, 1, 2, 3, 4, 5])
>>> a.flatten('F')
array([0, 3, 1, 4, 2, 5])
>>> a.ravel('F')
array([0, 3, 1, 4, 2, 5])
>>>
>>> x = np.array([[1,2],[3,4]]) >>> a = np.arange(6).reshape(2,3) >>> a.flatten()[...] = 1 >>> a array([[0, 1, 2], [3, 4, 5]]) >>> a.ravel()[...] = 1 >>> a array([[1, 1, 1], [1, 1, 1]]) >>>
flatten不會(huì)影響原始矩陣,返回的是一個(gè)副本,但是ravel是會(huì)修改數(shù)組
補(bǔ)充知識(shí):【Numpy】維度變化reshape、ravel、flatten、transpose、resize、swapaxes
0. 首先,創(chuàng)建一個(gè)多維數(shù)組
from numpy import *
a = arange(24)
得到:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
1.reshape 函數(shù)
b = a.reshape(2,3,4)
print(b)
得到一個(gè) 2*3*4 維的數(shù)組:
[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]
可以想象成2層小洋樓,每層有 3*4 個(gè)房間
2.ravel函數(shù) 可以將多維數(shù)組展平(也就是變回一維)
c = b.ravel()
print(c)
得到一維數(shù)組
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
3.flatten函數(shù) 也是將多維數(shù)組展平,與ravel函數(shù)的功能相同,不過flatten函數(shù)會(huì)請求分配內(nèi)存來保存結(jié)果,而ravel函數(shù)只是返回?cái)?shù)組的一個(gè)視圖(view)
c = b.flatten()
print(c)
得到一維數(shù)組
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
4.用元組設(shè)置維度
直接用一個(gè)正整數(shù)元組來設(shè)置數(shù)組的維度
b.shape = (6,4)
print(b)
這種做法將直接改變所操作的數(shù)組,現(xiàn)在數(shù)組b變成了一個(gè) 6*4 的多維數(shù)組
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23]]
5.transpose函數(shù) 將矩陣進(jìn)行轉(zhuǎn)置
d = b.transpose()
print(d)
得到 4*6 的多維數(shù)組
[[ 0 4 8 12 16 20] [ 1 5 9 13 17 21] [ 2 6 10 14 18 22] [ 3 7 11 15 19 23]]
6.transpose函數(shù) 將矩陣按照設(shè)定維度變換順序
b = a.reshape(2,3,4) c = b.transpose((2,1,0)) print(c)
得到一個(gè)形狀為4*3*2的數(shù)組:
array([[[ 0, 12], [ 4, 16], [ 8, 20]], [[ 1, 13], [ 5, 17], [ 9, 21]], [[ 2, 14], [ 6, 18], [10, 22]], [[ 3, 15], [ 7, 19], [11, 23]]])
7.resize函數(shù)和reshape函數(shù)的功能一樣,但resize會(huì)直接修改所操作的數(shù)組
b.resize((2,12))
print(b)
得到 2*12 的兩維數(shù)組
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]
并且這一步不可以通過賦值來實(shí)現(xiàn),如下所示:
e = b.resize((2,12))
print(e)
此時(shí)結(jié)果為:
None
8.swapaxes(ax1,ax2) : 將數(shù)組n個(gè)維度中兩個(gè)維度進(jìn)行調(diào)換,不改變原數(shù)組
b = a.reshape(2,3,4) c = b.swapaxes(0,2) print(c)
得到一個(gè)形狀為4*3*2的數(shù)組(可以和6.transpose函數(shù)進(jìn)行比較來看):
array([[[ 0, 12], [ 4, 16], [ 8, 20]], [[ 1, 13], [ 5, 17], [ 9, 21]], [[ 2, 14], [ 6, 18], [10, 22]], [[ 3, 15], [ 7, 19], [11, 23]]])
以上這篇淺談numpy中函數(shù)resize與reshape,ravel與flatten的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用Python每天自動(dòng)給女友免費(fèi)發(fā)短信
大家好,本篇文章主要講的是用Python每天自動(dòng)給女友免費(fèi)發(fā)短信,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Python中的np.vstack()和np.hstack()詳解
這篇文章主要介紹了np.vstack()和np.hstack(),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Django2.1.7 查詢數(shù)據(jù)返回json格式的實(shí)現(xiàn)
這篇文章主要介紹了Django2.1.7 查詢數(shù)據(jù)返回json格式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
使用Python和PySpark進(jìn)行數(shù)據(jù)分析的實(shí)戰(zhàn)教程
數(shù)據(jù)分析是當(dāng)今信息時(shí)代中至關(guān)重要的技能之一,Python和PySpark作為強(qiáng)大的工具,提供了豐富的庫和功能,使得數(shù)據(jù)分析變得更加高效和靈活,在這篇文章中,我們將深入探討如何使用Python和PySpark進(jìn)行數(shù)據(jù)分析,需要的朋友可以參考下2024-01-01
Django之創(chuàng)建引擎索引報(bào)錯(cuò)及解決詳解
這篇文章主要介紹了Django之創(chuàng)建引擎索引報(bào)錯(cuò)及解決詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
總結(jié)幾個(gè)非常實(shí)用的Python庫
Python一直被自稱“batteries included”,就是因?yàn)閮?nèi)置了許多非常有用的模塊,無需額外安裝和配置,即可直接使用. 除了內(nèi)建的模塊外,Python還有大量的第三方模塊,直接使用pip安裝即可使用.下面給大家簡單介紹幾個(gè)Python非常實(shí)用的自帶庫和第三方庫,需要的朋友可以參考下2021-06-06

