mxnet ndarray 不合理的设计

ndarray 是 mxnet 的核心, 但其 api 设计有些不合理之处, api 不够完善:
1.
https://mxnet.incubator.apache.org/tutorials/basic/ndarray_indexing.html#new-advanced-indexing-features-in-v1-0
"Advanced indexing always returns a copy of the data." 讲道理, indexing 应该返回 view, 比如 numpy 就是 view, 而不是 copy, 不知 mxnet 开发团队是出于怎样的考虑? 为何不提供一个参数, 让用户选择是否 copy ?
2.
https://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html
"mxnet.ndarray.NDArray.T does real data transpose to return new a copied array" 不知这种设计是出于何种考虑? 性能? 还是希望有开发者出来解释一下

返回view很多时候是为了省内存,实际数值运算时因为内存存储不连续,速度并不快,而且不易并行,code会很难写,写了性能也不高。主要还是设计理念的差别。

1赞

有些道理,mxnet当初吸引我的就是内存需求小。。。

内存需求小不是通过返回view来实现的,实际运算过程中,通过对静态计算图的优化,可以达到很好的省内存的目的,我觉得这种优化比费老大劲写个对view操作的算法有意义的多。

我赞同你第一次回复说的,只是如果array很大的话不知道会不会有差别。比如说一个array几个G或者更大

一般不会遇到一个array就有几个G的情况吧。如果真有这样的case就需要上分布式了。

是的,静态图真的省内存多了,sym.slice大概相当于view吧

sym.slice不一定是view,因为支持不连续内存数据的slice。