2024-04-25 05:11:05 发布
网友
Numpy的^{}函数和^{}函数有什么区别?你应该什么时候用一个而不是另一个?它们似乎为我能想到的所有输入生成相同的输出。
由于其他问题正被重定向到这个问题,这个问题是关于asanyarray或other array creation routines的,所以可能有必要对它们各自的工作做一个简短的总结。
asanyarray
不同之处主要在于何时返回未更改的输入,而不是将新数组作为副本。
^{}提供了各种各样的选项(大多数其他函数都是围绕它的瘦包装器),包括确定何时复制的标志。一个完整的解释需要和文档一样长的时间(参见Array Creation,但是简单地说,这里有一些示例:
假设a是ndarray,而m是matrix,它们都有dtype的float32:
a
ndarray
m
matrix
dtype
float32
np.array(a)
np.array(m)
np.array(a, copy=False)
np.array(m, copy=False)
np.array(a, copy=False, subok=True)
np.array(m, copy=False, subok=True)
np.array(a, dtype=int, copy=False, subok=True)
其他大多数函数都是array周围的薄包装器,用于控制何时进行复制:
array
copy=False
subok=True
order='C')
order='F'
object
还有一些方便的函数,例如^{}(与asarray相同的复制规则,但是如果有nan或inf值,则会引发ValueError),以及matrix之类的子类或记录数组之类的特殊情况的构造函数,当然还有实际的^{}构造函数(它允许您直接创建一个数组缓冲区)。
asarray
nan
inf
ValueError
这个例子可以证明这种差异:
生成矩阵
>>> A = numpy.matrix(numpy.ones((3,3))) >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
使用numpy.array修改A。无法工作,因为您正在修改副本
numpy.array
A
>>> numpy.array(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
使用numpy.asarray修改A。它之所以起作用是因为您正在修改A本身
numpy.asarray
>>> numpy.asarray(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 2., 2., 2.]])
希望这有帮助!
definition of ^{}是:
def asarray(a, dtype=None, order=None): return array(a, dtype, copy=False, order=order)
所以它就像array,除了它有更少的选项,和copy=False。array默认情况下有copy=True。
copy=True
主要的区别是array(默认情况下)将生成对象的副本,而asarray将不会,除非有必要。
由于其他问题正被重定向到这个问题,这个问题是关于
asanyarray
或other array creation routines的,所以可能有必要对它们各自的工作做一个简短的总结。不同之处主要在于何时返回未更改的输入,而不是将新数组作为副本。
^{} 提供了各种各样的选项(大多数其他函数都是围绕它的瘦包装器),包括确定何时复制的标志。一个完整的解释需要和文档一样长的时间(参见Array Creation,但是简单地说,这里有一些示例:
假设
a
是ndarray
,而m
是matrix
,它们都有dtype
的float32
:np.array(a)
和np.array(m)
将同时复制,因为这是默认行为。np.array(a, copy=False)
和np.array(m, copy=False)
将复制m
,但不会复制a
,因为m
不是ndarray
。np.array(a, copy=False, subok=True)
和np.array(m, copy=False, subok=True)
两者都不会复制,因为m
是matrix
,它是ndarray
的一个子类。np.array(a, dtype=int, copy=False, subok=True)
将同时复制两者,因为dtype
不兼容。其他大多数函数都是
array
周围的薄包装器,用于控制何时进行复制:ndarray
(copy=False
),则返回未分片的输入。ndarray
或类似于matrix
(copy=False
,subok=True
)的子类,则返回未分片的输入。copy=False
,order='C')
)中的兼容的ndarray
,则返回未分片的输入。copy=False
,order='F'
)兼容的ndarray
,则返回未分片的输入。object
数组);始终被复制。还有一些方便的函数,例如^{} (与} 构造函数(它允许您直接创建一个数组缓冲区)。
asarray
相同的复制规则,但是如果有nan
或inf
值,则会引发ValueError
),以及matrix
之类的子类或记录数组之类的特殊情况的构造函数,当然还有实际的^{这个例子可以证明这种差异:
生成矩阵
使用
numpy.array
修改A
。无法工作,因为您正在修改副本使用
numpy.asarray
修改A
。它之所以起作用是因为您正在修改A
本身希望这有帮助!
definition of ^{} 是:
所以它就像
array
,除了它有更少的选项,和copy=False
。array
默认情况下有copy=True
。主要的区别是
array
(默认情况下)将生成对象的副本,而asarray
将不会,除非有必要。相关问题 更多 >
编程相关推荐