版權聲明:本文為部落客原創文章,遵循 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())
複制