unu*_*tbu 216
本的定义asarray
为:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
Run Code Online (Sandbox Code Playgroud)
所以它就像array
,除了它有更少的选项,和copy=False
.array
有copy=True
默认.
主要区别在于array
(默认情况下)将制作对象的副本,而asarray
除非必要,否则不会.
小智 106
这个例子可以证明这种差异:
生成一个矩阵
>>> A = numpy.matrix(numpy.ones((3,3)))
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)使用numpy.array
修改A
.因为您正在修改副本而不起作用
>>> numpy.array(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)使用numpy.asarray
修改A
.它起作用是因为你正在修改A
自己
>>> numpy.asarray(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
Run Code Online (Sandbox Code Playgroud)希望这可以帮助!
aba*_*ert 71
由于其他问题被重定向到这个询问asanyarray
或其他数组创建例程的问题,因此可能值得简要总结一下每个问题的作用.
差异主要在于何时返回输入不变,而不是将新数组作为副本.
array
提供了多种选项(大多数其他功能都是围绕它的薄包装器),包括用于确定何时复制的标志.完整的解释只需要与文档一样长(参见数组创建,但简要地说,这里有一些例子:
假设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
是a matrix
,它是的子类ndarray
.np.array(a, dtype=int, copy=False, subok=True)
将两者都复制,因为dtype
它不兼容.array
在发生复制时,大多数其他函数都是围绕该控件的瘦包装器:
asarray
:如果输入是兼容的ndarray
(copy=False
),则输入将被返回.asanyarray
:如果输入是兼容的ndarray
或类似matrix
(copy=False
,subok=True
)的子类,则输入将被返回.ascontiguousarray
:如果输入ndarray
在连续的C顺序中是兼容的,则输入将被返回(copy=False
,order='C')
.asfortranarray
:如果输入与ndarray
连续的Fortran顺序(copy=False
,order='F'
)兼容,则输入将被返回.require
:如果输入与指定的需求字符串兼容,则输入将被返回.copy
:始终复制输入.fromiter
:输入被视为可迭代的(因此,例如,您可以从迭代器的元素构造数组,而不是使用迭代器构造数组object
); 总是复制.还有便利函数,比如asarray_chkfinite
(相同的复制规则asarray
,但是ValueError
如果有任何nan
或inf
值则引发),子类的构造函数matrix
或者像记录数组这样的特殊情况,当然还有实际的ndarray
构造函数(它允许你直接创建数组)超出缓冲区的步伐).
ash*_*shr 12
该差异的文件中提到的相当清楚array
和asarray
.不同之处在于参数列表,因此函数的操作取决于这些参数.
功能定义是:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
Run Code Online (Sandbox Code Playgroud)
和
numpy.asarray(a, dtype=None, order=None)
Run Code Online (Sandbox Code Playgroud)
以下参数是可以传递给的文件,array
而不是 asarray
文档中提到的参数:
copy:bool,optional 如果为true(默认值),则复制该对象.否则,只有在
__array__
返回副本,obj是嵌套序列或需要副本以满足任何其他要求(dtype,order等)时才会生成副本.subok:bool,optional 如果为True,则子类将被传递,否则返回的数组将被强制为基类数组(默认).
ndmin:int,optional指定结果数组应具有的最小维数.根据需要,将根据需要预先设置形状.
asarray(x)
就好像array(x, copy=False)
当您希望在完成任何其他操作之前asarray(x)
确保它是一个数组时使用。x
如果x
已经是一个数组,则不会进行任何复制。它不会造成多余的性能影响。
x
下面是一个确保首先转换为数组的函数示例。
def mysum(x):
return np.asarray(x).sum()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
90426 次 |
最近记录: |