2024-10-01 02:19:18 发布
网友
import numpy as np y = np.array(((1,2,3),(4,5,6),(7,8,9))) OUTPUT: print(y.flatten()) [1 2 3 4 5 6 7 8 9] print(y.ravel()) [1 2 3 4 5 6 7 8 9]
两个函数都返回相同的列表。 那么,两个不同的职能部门执行同一项工作的需要是什么呢。
以下是函数的正确命名空间:
^{}
这两个函数都返回指向新内存结构的扁平1D数组。
import numpy a = numpy.array([[1,2],[3,4]]) r = numpy.ravel(a) f = numpy.ndarray.flatten(a) print(id(a)) print(id(r)) print(id(f)) print(r) print(f) print("\nbase r:", r.base) print("\nbase f:", f.base) ---returns--- 140541099429760 140541099471056 140541099473216 [1 2 3 4] [1 2 3 4] base r: [[1 2] [3 4]] base f: None
在上面的示例中:
我们怎么检查东西是不是复制品? 使用ndarray的.base属性。如果是视图,基将是原始数组;如果是副本,基将是None。
ndarray
.base
None
正如here所解释的,关键区别在于:
flatten是ndarray对象的方法,因此只能对真正的numpy数组调用。
flatten
ravel是库级函数,因此可以对任何可以成功解析的对象调用。
ravel
例如,ravel将处理nDarray列表,而flatten不可用于该类型的对象。
@IanH在回答中也指出了与记忆处理的重要区别。
当前的API是:
以下是函数的正确命名空间:
^{}
^{}
这两个函数都返回指向新内存结构的扁平1D数组。
在上面的示例中:
我们怎么检查东西是不是复制品? 使用
ndarray
的.base
属性。如果是视图,基将是原始数组;如果是副本,基将是None
。正如here所解释的,关键区别在于:
flatten
是ndarray对象的方法,因此只能对真正的numpy数组调用。ravel
是库级函数,因此可以对任何可以成功解析的对象调用。例如,
ravel
将处理nDarray列表,而flatten
不可用于该类型的对象。@IanH在回答中也指出了与记忆处理的重要区别。
当前的API是:
相关问题 更多 >
编程相关推荐