数据操作 讨论区


#1

http://zh.diveintodeeplearning.org/chapter_prerequisite/ndarray.html


于置顶 #2

#3

文档中对以下代码的解释是“从python的数组直接构造”,这样说是不精确的,因为,[[1,2],[2,3]],不是 array,而是 list,原谅我的强迫症 :joy:

nd.array([[1,2],[2,3]])


#4

根据API文档,random_normal 的第二个参数是标准差(Standard Deviation),不是方差


#5

以下是教程中给出的示例代码

In [1]:

from mxnet import ndarray as nd
import numpy as np
x = np.ones((2,3))
y = nd.array(x)  # numpy -> mxnet
z = y.asnumpy()  # mxnet -> numpy
print([z, y])

[array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]], dtype=float32), 
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
<NDArray 2x3 @cpu(0)>]

In [5]:
x
Out[5]:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

In [3]:
z
Out[3]:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]], dtype=float32)

那么问题来了,x, z 都是 numpy 数组,为啥输出时,格式不一样,z 的输出带着 dtype,而 x 木有


#6

建议像numpy 出一个API 对照表,方便numpy 用户迁移到nd上。https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html


#7

ndarray里有创建单位矩阵的函数吗?


#8

“多维截取: x[1:2, 1:3]”, 让我有点歧义。
为什么不设计成 x[1:1, 1:2] 来表示截取第2行第2列 第3列的数呢?


#9

为什么直接写入指定位置 x[1,2] 是第 2 行第 3 列,列从0开始
而其他的列都是从1开始的 比如多维写入 x[1:2,1:3] = 9.0 指定的是第 2 行第 2 列和第 3 列


#10

@mashuiping @joker

左闭右开是惯例,详见 Accelerated C++ 一书

书里说到过,如果 a = [3, 5), b = [5, 7),a + b就直接得到 [3, 7),很方便。而且空区间可用[x,x)表示。另外,[0, n)是n个连续整数,例如Python里for _ in range(n) 就会执行n次,很好记。

很多语言都是这样,例如 Python,

>>> import itertools
>>> a = range(1, 3)
>>> b = range(3, 5)
>>> [i for i in itertools.chain(a, b)]
[1, 2, 3, 4]



>>> for i in range(3):
...     print(i)
... 
0
1
2

#11

感谢细致的回复~


#12

感谢您的讲解!


#13

1

请问这个形状改变的函数如何能够使用GPU加速?


#14

感谢您的讲解!


#15

https://mxnet.incubator.apache.org/api/python/ndarray.html这个地址404了


#16

这个在 https://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html


#17

两个矩阵: a.shape = [32,1024,100,3] b.shape = [32,1024,100,3] 想做dot运算,得到c.shape=[32,1024,100,1] 也就是最后两列 100x3和100x3做每一行的点积,应该怎么写?
直接c = mx.nd.dot(a,b) 肯定不行
各位大牛 有什么办法可以做到么 不要for循环啊


#18

reshape后batch_dot
https://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html?highlight=batch_dot#mxnet.ndarray.batch_dot


#19

非常感谢,另外:有一个list,比如: L=[mx.nd.zeros(3,1,5), mx.nd.zeros(3,2,5)], 想把L中的两个ndarray类型元素concat起来,concat(L[0],L[1], dim=-2) 形成一个ndarray, shape为 [3,3,5]. 直接mx.nd.array(L)是不行的,可以使用for循环,把L中的元素一个个concat起来,但问题是当L中元素很多的时候,for循环效率太低,大牛有没有什么方法可以快速实现该功能呢?


#20

请教一个问题:data.shape = [128, 3], 是128个三维点,indices.shape = [64, 128],想根据indices来将data分配到64个格子中,indices中,每一行代表一个格子编号,每一列代表data中某个点是否属于该格子,比如indices[10,100]=1则表示data中的第100个数据点属于第10个格子,indices中只有0和1,0表示不属于该格子,1表示属于。请问大牛,如何用mxnet中的ndarray api来实现?谢谢