天天看點

動手學深度學習-資料操作

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結和本聲明。

本文連結:https://blog.csdn.net/github_39655029/article/details/89151587

作為深度學習的基礎,我們常會頻繁對資料進行操作,以下則是介紹如何對記憶體中的資料進行常用操作的相關代碼;

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/4/9 14:11
# @Author  : cunyu
# @Site    : cunyu1943.github.io
# @File    : dataOperation.py
# @Software: PyCharm


from mxnet import nd

"""
建立NDArray
"""

# 建立行向量
rowX = nd.arange(12)
print(rowX)

# 擷取NDArray執行個體形狀
shapeOfRowX = rowX.shape
print(shapeOfRowX)

# 擷取NDArray執行個體元素總數
numOfElement = rowX.size
print(numOfElement)

# 改變行向量形狀
newRowX = rowX.reshape((3,4))
print(newRowX)

# 建立元素全為0的張量
tensor0 = nd.zeros((2, 3, 4))
print(tensor0)

# 建立元素均為1的張量
tensor1 = nd.ones((3, 4))
print(tensor1)

# 通過list指定要建立的NDArray中每個元素的值
tensorY = nd.array([[1,3, 4, 9], [6, 3, 4, 5], [0, 8, 9, 7]])
print(tensorY)

# 随機生成NDArray中每個每個元素的值
tensorZ = nd.random.normal(0, 1, shape = (3,4))
print(tensorZ)

"""
運算
"""

# 加法
print(newRowX + tensorY)

# 乘除法
print(newRowX * tensorY)
print(newRowX / tensorY)

# 指數
print(tensorY.exp())
# print(nd.exp(tensorY))

# 矩陣乘法
print(nd.dot(newRowX, tensorY.T))

# 連結
print(nd.concat(newRowX, tensorY, dim=0), nd.concat(newRowX, tensorY, dim=1))

# 使用條件判别式得到元素為0/1的新的NDArray
print(newRowX == tensorY)

# 求和得到隻有一個元素的NDArray
print(tensorY.sum())
# print(nd.sum(tensorY))

# 張量變換為Python中的标量
print(newRowX.norm().asscalar())
# print(nd.norm(newRowX).asscalar())

"""
對形狀不同的NDArray按元素運算時,觸發廣播機制:先适當複制元素是得NDArray形狀相同後再按照元素運算
"""
A = nd.arange(3).reshape((3,1))
B = nd.arange(2).reshape((1,2))
print('A + B', A + B)

""""
索引
"""

# 截取範圍
print(newRowX[1:3])

# 通路單個元素
print(newRowX[2,3])
newRowX[2, 3] = 15
print(newRowX[2,3])
print(newRowX)
newRowX[1:2, :] = 10
print(newRowX)

"""
運算記憶體開銷
"""

# 制造了臨時記憶體開銷
before = id(tensorY)
tensorY = newRowX + tensorY
print(id(tensorY) == before)

Z = tensorY.zeros_like()
before = id(Z)
Z[:] = newRowX + tensorY
print(id(Z) == before)

# 避免臨時記憶體開銷
nd.elemwise_add(newRowX, tensorY, out=Z)
print(id(Z) == before)

"""
NDArray和NumPy互相變換
"""

import numpy as np

# NumPy轉NDArray
P = np.ones((2, 3))
D = nd.array(P)
print(D)

# NDArray轉NumPy
print(D.asnumpy())           

複制