Python Numpy和#x27;s array()和asarray()函数?
Numpy和函数之间的区别是什么?什么时候应该使用一个而不是另一个?它们似乎为我所能想到的所有输入生成了相同的输出。结果是: 因此,它类似于Python Numpy和#x27;s array()和asarray()函数?,python,arrays,numpy,Python,Arrays,Numpy,Numpy和函数之间的区别是什么?什么时候应该使用一个而不是另一个?它们似乎为我所能想到的所有输入生成了相同的输出。结果是: 因此,它类似于array,只是它的选项较少,而且copy=False数组具有copy=True 主要区别在于array(默认情况下)将创建对象的副本,而asarray除非必要,否则不会创建对象的副本。和的文档中非常清楚地提到了这些区别。区别在于参数列表,因此函数的操作取决于这些参数 函数定义如下: numpy.array(object, dtype=None, copy=
array
,只是它的选项较少,而且copy=False
<默认情况下,代码>数组具有copy=True
主要区别在于
array
(默认情况下)将创建对象的副本,而asarray
除非必要,否则不会创建对象的副本。和的文档中非常清楚地提到了这些区别。区别在于参数列表,因此函数的操作取决于这些参数
函数定义如下:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
及
以下参数是可以传递给array
和notasarray
的参数,如文档中所述:
复制:bool,可选如果为真(默认),则复制对象。
否则,仅当\uuuuuu数组\uuuuu
返回副本时,才会进行复制,如果
obj是一个嵌套序列,或者如果需要一个副本来满足
其他要求(数据类型、订单等)
subok:bool,可选如果为True,则子类将为
通过,否则返回的数组将被强制为
基类数组(默认值)
ndmin:int,可选指定所需的最小维度数
生成的数组应具有。将根据形状预先悬挂
根据需要来满足这一要求
这个例子可以说明这种差异:
>>> A = numpy.matrix(numpy.ones((3,3)))
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
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(A)[2]=2
>>> A
matrix([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 2., 2., 2.]])
希望这有帮助 这里有一个简单的例子可以说明这种差异 主要区别在于数组将复制原始数据,使用不同的对象可以修改原始数组中的数据
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)
数组(a)中的内容保持不变,我们仍然可以使用另一个对象对数据执行任何操作,而无需修改原始数组中的内容 由于其他问题被重定向到这个问题,询问关于asanyarray或的问题,因此可能值得对每个问题做一个简短的总结
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)
区别主要在于何时返回未更改的输入,而不是将新数组作为副本
提供了多种选项(大多数其他函数都是围绕它的精简包装器),包括用于确定何时复制的标志。完整的解释将花费与文档一样长的时间(请参阅,但简单地说,以下是一些示例:
假设a
是ndarray
,m
是矩阵
,它们都有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
,它是矩阵
的子类ndarray
将同时复制这两种类型,因为np.array(a,dtype=int,copy=False,subok=True)
不兼容dtype
array
的薄型包装,用于控制何时进行复制:
- :如果输入是兼容的
(ndarray
),则输入将以未复制的方式返回copy=False
- :如果输入是兼容的
或类似ndarray
的子类(matrix
,copy=False
),则输入将以未复制的方式返回subok=True
- :如果输入是连续C顺序的兼容
(ndarray
,copy=False
,则输入将以未复制的方式返回order='C')
- :如果输入是连续Fortran顺序的兼容
(ndarray
,copy=False
),则输入将以未复制的方式返回order='F'
- :如果输入与指定的要求字符串兼容,则将返回未经复制的输入
- :始终复制输入
- :输入被视为iterable(因此,例如,您可以从迭代器的元素构造数组,而不是使用迭代器构建
数组);始终复制对象
asarray
相同的复制规则,但如果存在nan
或inf
值,则会引发ValueError
),以及matrix
子类或记录数组等特殊情况的构造函数,当然还有实际的构造函数(这使您可以直接在缓冲区上创建一个数组)。asarray(x)
类似于array(x,copy=False)
如果要确保在执行任何其他操作之前,x
将是一个数组,请使用asarray(x)
。如果x
已经是一个数组,则不会执行任何复制。这不会导致冗余性能损失
下面是一个函数示例,该函数确保首先将x
转换为数组
def mysum(x):
返回np.asarray(x).sum()
那么我们应该什么时候使用它们呢?如果从头开始创建一个数组,哪个更好,数组([1,2,3])
或者数组([1,2,3])
?@endolith:[1,2,3]
是一个Python列表,所以c
import numpy as np
a = np.arange(0.0, 10.2, 0.12)
int_cvr = np.asarray(a, dtype = np.int64)