mxnet数据操作

作者: 306c945da5f4 | 来源:发表于2018-12-31 16:24 被阅读0次

创建NDArray

from mxnet import nd

# 创建行向量
x = nd.arange(12)
print(x)

# 打印实例形状
print(x.shape)
# 输出 (12,)

# 改变实例形状
x = x.reshape((3,4))
# x = x.reshape((-1,4))
print(x)

# 创建各项为0 形状为(2,3,4)的张量
print(nd.zeros((2,3,4)))

# 创建各项为1 形状为(2,3,4)的张量
print(nd.ones((2,3,4)))

# 创建指定元素的张量
y = nd.array([[1,2,3,4], [2,3,5,6], [2,5,7,8]])
print(y)

# 随机生成 形状为(3,4) 每个元素均服从N(0,1)的正态分布
z = nd.random.normal(0, 1, shape=(3,4))
print(z)

运算

from mxnet import nd

# 创建向量
x = nd.arange(12)
x = x.reshape((3,4))
y = nd.array([[1,2,3,4], [2,3,5,6], [2,5,7,8]])

# 按元素加法运算
print(x+y)

# 减法运算
print(x-y)

# 乘法运算
print(x*y)

# 除法运算
print(x/y)

# 指数运算
print(y.exp())

# 用dot做矩阵运算 x与y的转置相乘 得到3x3的矩阵
print(nd.dot(x, y.T))

# 两个矩阵连接到一起 在行上 (维度为0)
print(nd.concat(x, y, dim=0))
# 在列上 (维度为1)
print(nd.concat(x, y, dim=1))

# 按元素判断是否相等 返回一个新矩阵 (相等为1 不相等为0)
print(x == y)

# 求和 返回一个元素
print(x.sum())

广播机制

当对形状不同的两个NDArray按元素操作后,可能会触发广播(broadcasting)机制:先适当复制元素使得两个NDArray形状相同后再按元素操作。

from mxnet import nd

a = nd.arange(3).reshape((3,1))
b = nd.arange(2).reshape((2,1))

print(a,b)

# 加法运算
print(a + b)

索引

from mxnet import nd

x = nd.arange(12).reshape((3,4))

print(x)

# 下标从0开始
# 按范围截取 截取1,2两行
print(x[1:3])

# 访问单个元素
x[1,2] = 12
print(x)

# 截取一部分元素重新赋值
x[1:2, :] = 24
print(x)

运算的内存开销

对每个操作新开内存来存储运算结果。即使像y = x + 这样的运算,都会新建内存,然后y指向新的内存。可以使用python自带的id函数来证明这一点:如果两个实例id一致,那么他们所对应的内存地址相同,反之则不同。

from mxnet import nd

# 创建向量
x = nd.arange(12)
x = x.reshape((3,4))
y = nd.array([[1,2,3,4], [2,3,5,6], [2,5,7,8]])

before = id(y)
y = x + y
print(id(y) == before)
# False

# 指定结果到特定内存 创建了临时内存来存储x+y的结果
z = y.zeros_like()
before = id(z)
z[:] = x + y
print(id(z) == before)
# True

# 避免临时内存开销
nd.elemwise_add(x, y, out=z)
print(id(z) == before)
# True

# 如果x不再被复用 也可以使用x[:] = x + y 或者 x += y来减少内存开销
before = id(x)
x += y
print(id(x) == before)
# True

NDArray 和 NumPy互相转化

import numpy as np
from mxnet import nd

p = np.ones((2,3))
d = nd.array(p)

print(d)

print(d.asnumpy())

相关文章

网友评论

    本文标题:mxnet数据操作

    本文链接:https://www.haomeiwen.com/subject/mfcwlqtx.html