亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Numpy之如何改變數(shù)組形狀

 更新時(shí)間:2023年06月25日 09:39:01   作者:大笨牛@  
這篇文章主要介紹了Numpy之如何改變數(shù)組形狀問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

本篇總結(jié)、介紹數(shù)組的基本操作之一——改變數(shù)組形狀 。

1. reshape

numpy.reshape(a, newshape, order=‘C')

在不改變數(shù)據(jù)的情況下為數(shù)組賦予新的形狀

  • a:類(lèi)數(shù)組(array_like)。待重塑數(shù)組
  • newshape:整數(shù)(一維數(shù)組)或者整數(shù)列表/元組(高維數(shù)組)等。重塑之后的數(shù)組形狀(shape)。需要注意的是重塑之后的數(shù)組形狀要與待重塑數(shù)組的形狀相容
  • order:{‘C’, ‘F’, ‘A’},可選參數(shù)。數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)順序
>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])
## 打印arr1形狀
>>> arr1.shape
(8,)
# 將arr1變換為二維數(shù)組
>>> arr2 = np.reshape(arr1,(2,4))
>>> arr2
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
## 打印arr2形狀
>>> arr2.shape
(2, 4)
# 將arr1變換為三維數(shù)組
>>> arr3 = np.reshape(arr1,(2,2,2))
>>> arr3
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
## 打印arr3形狀
>>> arr3.shape
(2, 2, 2)
# 將arr3轉(zhuǎn)換為一維數(shù)組
>>> arr4 = np.reshape(arr3,8)
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
## 打印arr4形狀
>>> arr4.shape
(8,)
# 重塑之后的數(shù)組形狀要與待重塑數(shù)組的形狀相容,否則報(bào)錯(cuò)
>>> arr5 = np.reshape(arr1,(3,3))
ValueError: cannot reshape array of size 8 into shape (3,3)

注釋?zhuān)?/strong> 

newshape參數(shù)的其中一維可以是-1,表示該維度上的長(zhǎng)度會(huì)自動(dòng)根據(jù)數(shù)組的長(zhǎng)度及其余維度的長(zhǎng)度自動(dòng)推斷出來(lái)。

我們看一下下面的例子:

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr2 = np.reshape(arr1,(2,-1))
>>> arr2
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

只能其中一維為-1:

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr2 = np.reshape(arr1,(2,-1,-1))
ValueError: can only specify one unknown dimension

另外,需要注意numpy.reshape(a,(1,-1))與numpy.reshape(a,(-1,1))以及numpy.reshape(a,-1)的區(qū)別:

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])
# numpy.reshape(a,(1,-1))
>>> arr2 = np.reshape(arr1,(1,-1))
>>> arr2
array([[0, 1, 2, 3, 4, 5, 6, 7]])
>>> arr2.shape
(1, 8)
# numpy.reshape(a,(-1,1))
>>> arr3 = np.reshape(arr1,(-1,1))
>>> arr3
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7]])
>>> arr3.shape
(8, 1)
# numpy.reshape(a,-1)
>>> arr4 = np.reshape(arr3,-1)
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr4.shape
(8,)

注釋?zhuān)?/strong>

每個(gè)Numpy數(shù)組(ndarray)的實(shí)例也都有自己的reshape方法(注意與函數(shù)reshape區(qū)別),其語(yǔ)法如下:

a.reshape(shape, order=‘C’):在不改變數(shù)據(jù)的情況下為數(shù)組賦予新的形狀(a為Numpy數(shù)組實(shí)例)

無(wú)論從語(yǔ)法還是功能上來(lái)說(shuō),Numpy數(shù)組的reshape方法和Numpy的reshape函數(shù)都一樣。

兩者的主要區(qū)別在于:

(1)Numpy的reshape函數(shù)可以直接對(duì)諸如python列表對(duì)象進(jìn)行操作(但返回的依然是Numpy ndarray對(duì)象),而Numpy數(shù)組的reshape方法則不行。

(2)Numpy數(shù)組的reshape方法支持形狀(shape)參數(shù)的每個(gè)元素作為單獨(dú)的參數(shù)傳入,而Numpy的reshape函數(shù)不行。

我們先來(lái)看一下第一點(diǎn):

# numpy.reshape函數(shù)
>>> list1 = [0,1,2,3,4,5,6,7,8]
>>> arr1 = np.reshape(list1,(3,3))
>>> arr1
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
# ndarray.reshape方法
>>> list1.reshape(list1,(3,3))
AttributeError: 'list' object has no attribute 'reshape'

我們?cè)賮?lái)看一下第二點(diǎn):

# numpy.reshape函數(shù)
## 形狀參數(shù)作為一個(gè)整體傳入
>>> arr1 = np.arange(8)
>>> np.reshape(arr1,(2,4))
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
## 形狀參數(shù)單獨(dú)分開(kāi)傳入
>>> np.reshape(arr1,2,4)
TypeError: order must be str, not int
# ndarray.reshape方法
## 形狀參數(shù)作為一個(gè)整體傳入
>>> arr1 = np.arange(8)
>>> arr1.reshape((2,4))
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
## 形狀參數(shù)的元素單獨(dú)傳入
>>> arr1.reshape(2,4)
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

注釋?zhuān)?/strong> 

numpy.reshape和ndarray.reshape都不會(huì)改變?cè)瓟?shù)組的形狀。

2. ravel

numpy.ravel(a, order=‘C')

返回展平成一維的數(shù)組元素。

一般返回的是數(shù)組視圖(view),需要的時(shí)候(例如order改變)才會(huì)返回?cái)?shù)組的副本(copy)

  • a:類(lèi)數(shù)組
  • order:{‘C’,’F’, ‘A’, ‘K’},可選參數(shù)

注釋?zhuān)?/strong>

numpy.ravel和ndarray.ravel以及ndarray.reshape(-1)等同。

>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.ravel(arr1)
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr1.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr1.reshape(-1)
array([0, 1, 2, 3, 4, 5, 6, 7])

3. ndarray.flatten

ndarray.flatten(order=‘C')

返回坍塌成一維的數(shù)組的副本

  • order:{‘C’, ‘F’, ‘A’, ‘K’},可選參數(shù)
>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> arr1.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7])

注釋?zhuān)?/strong>

有關(guān)ravel和ndarray.flatten的區(qū)別和聯(lián)系:

  • numpy.ravel、ndarray.ravel、ndarray.reshape(-1)以及ndarray.flatten都可以返回展平成一維的數(shù)組元素
  • numpy.ravel、ndarray.ravel、ndarray.reshape(-1)返回的是數(shù)組的視圖,而ndarray.flatten返回的是數(shù)組的副本
>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> arr2 = arr1.reshape(-1)
>>> arr2
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr3 = arr1.ravel()
>>> arr3
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr4 = arr1.flatten()
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr5 = arr1.ravel(order='F')
>>> arr5
array([0, 4, 2, 6, 1, 5, 3, 7])
>>> arr1[0][0][1] = -1
# arr1改變后
>>> arr1
array([[[ 0, -1],
        [ 2,  3]],
       [[ 4,  5],
        [ 6,  7]]])
>>> arr2
array([ 0, -1,  2,  3,  4,  5,  6,  7])
>>> arr3
array([ 0, -1,  2,  3,  4,  5,  6,  7])
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr5
array([0, 4, 2, 6, 1, 5, 3, 7])

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

Reference

[1]: https://numpy.org/doc/stable/reference/routines.array-manipulation.html

[2]: https://www.runoob.com/numpy/numpy-copies-and-views.html

相關(guān)文章

  • Python實(shí)現(xiàn)批量修改文件日期

    Python實(shí)現(xiàn)批量修改文件日期

    在日常工作和學(xué)習(xí)中,我們經(jīng)常需要修改文件的創(chuàng)建或修改日期,本文將介紹如何使用Python編寫(xiě)一個(gè)批量文件日期修改器,有需要的可以參考下
    2025-03-03
  • 如何用Python讀取pdf中的文字與表格

    如何用Python讀取pdf中的文字與表格

    這篇文章主要介紹了如何在Python中安裝和使用PyPDF2和pdfplumber庫(kù)來(lái)處理PDF文件,包括安裝步驟、庫(kù)的使用方法以及它們?cè)谔崛∥谋竞捅砀穹矫娴牟煌瑑?yōu)勢(shì),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • 用 Python 寫(xiě)的文檔批量翻譯工具效果竟然超出想象

    用 Python 寫(xiě)的文檔批量翻譯工具效果竟然超出想象

    這篇文章主要介紹了用 Python 寫(xiě)的文檔批量翻譯工具,效果竟然超越付費(fèi)軟件,這個(gè)非常適合python辦公自動(dòng)化腳本,非常不錯(cuò),實(shí)現(xiàn)方法也很簡(jiǎn)單,需要的朋友可以參考下
    2021-05-05
  • Python中的字典及其使用方法

    Python中的字典及其使用方法

    這篇文章主要介紹了Python中的字典及其使用方法,包括使用字典(添加、刪除、修改等操作)、遍歷字典以及字典與列表之間的嵌套使用具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • OpenCV學(xué)習(xí)之圖像的分割與修復(fù)詳解

    OpenCV學(xué)習(xí)之圖像的分割與修復(fù)詳解

    圖像分割本質(zhì)就是將前景目標(biāo)從背景中分離出來(lái)。在當(dāng)前的實(shí)際項(xiàng)目中,應(yīng)用傳統(tǒng)分割的并不多,大多是采用深度學(xué)習(xí)的方法以達(dá)到更好的效果。本文將詳細(xì)介紹一下OpenCV中的圖像分割與修復(fù),需要的可以參考一下
    2022-01-01
  • python實(shí)現(xiàn)剪貼板的操作

    python實(shí)現(xiàn)剪貼板的操作

    本文主要介紹了python實(shí)現(xiàn)剪貼板的操作,通過(guò)輸入一個(gè)命令行參數(shù),實(shí)現(xiàn)將特定的一些文本復(fù)制到剪貼板的操作。感興趣的可以了解一下
    2021-07-07
  • linux中使用Python對(duì)圖片進(jìn)行批量命名

    linux中使用Python對(duì)圖片進(jìn)行批量命名

    大家好,本篇文章主要講的是linux中使用Python對(duì)圖片進(jìn)行批量命名,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python基于Tkinter編寫(xiě)crc校驗(yàn)工具

    Python基于Tkinter編寫(xiě)crc校驗(yàn)工具

    這篇文章主要介紹了Python基于Tkinter編寫(xiě)crc校驗(yàn)工具,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法

    在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法

    今天小編就為大家分享一篇在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python使用Beautiful?Soup(BS4)庫(kù)解析HTML和XML

    Python使用Beautiful?Soup(BS4)庫(kù)解析HTML和XML

    這篇文章介紹了Python使用Beautiful?Soup(BS4)庫(kù)解析HTML和XML的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論