Numpy:np.array() 与 np.asarray()

1 np.array()

np.array()的作用就是按照一定要求将object转换为数组。

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
参数含义返回
object必选参数,类型为array_like,可以有四种类型:数组,公开数组接口的任何对象,__array__方法返回数组的对象,或任何(嵌套)序列。ndarray。满足指定要求的数组对象。
dtype数据类型,可选
数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型。此参数只能用于“upcast”数组。对于向下转换,请使用.astype(t)方法。
copybool,可选
如果为true(默认值),则复制对象。否则,只有当__array__返回副本,obj是嵌套序列,或者需要副本来满足任何其他要求(dtype,顺序等)时,才会进行复制。
order {‘K’,‘A’,‘C’,‘F’},可选
指定阵列的内存布局。如果object不是数组,则新创建的数组将按C顺序排列(行主要),除非指定了’F’,在这种情况下,它将采用Fortran顺序(专业列)。如果object是一个数组,则以下成立。
subok可选参数,类型为bool值。如果为True,则子类将被传递,否则返回的数组将被强制为基类数组(默认)。或者说,True:使用object的内部数据类型,False:使用object数组的数据类型。
ndmin可选参数,类型为int型。指定结果数组应具有的最小维数。

参考:

2 np.asarray()

numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

numpy.asarray(a, dtype = None, order = None)
参数描述
a任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype数据类型,可选
order可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

参考:

3 np.array() 与 np.asarray() 区别

主要区别在于 np.array(默认情况下)将会copy该对象,而 np.asarray除非必要,否则不会copy该对象。

  • object对象是普通迭代序列时
import numpy as np
 
data = [1,1,1]
print(type(data)) #<class 'list'> 列表类型
arr_ar = np.array(data)
arr_as = np.asarray(data)
 
#输出上没有区别
print(arr_ar) #[1 1 1]
print(arr_as) #[1 1 1]
 
data[1]=2
#改变原序列对arr_ar和arr_as没影响
print(arr_ar) #[1 1 1]
print(arr_as) #[1 1 1]
 
#此时data是[1, 2, 1]
#改变arr_ar和arr_as对原序列没有影响
arr_ar[1]=3
print(data) #[1, 2, 1]
arr_as[1]=3
print(data)  #[1, 2, 1]

可见在参数对象是普通迭代序列时,asarray和array没有区别。

  • object对象是ndarray对象时
import numpy as np
 
data = np.ones((3,))
#print(type(data)) #<class 'numpy.ndarray'> 数组类型
arr_ar = np.array(data)
arr_as = np.asarray(data)
 
print(arr_ar) #[1. 1. 1.]
print(arr_as) #[1. 1. 1.]
 
"""
这边区别就出来了。修改原始序列后,
np.array()产生的数组不变,
但是np.asarray()产生的数组发生了变化
"""
data[1]=2
print(arr_ar) #[1. 1. 1.]
print(arr_as) #[1. 2. 1.]  !!!
 
 
"""
这边也有区别,修改array产生的数组,不影响原始序列
修改asarray产生的数组,会影响原始序列
"""
#此时data=[1. 2. 1.]
arr_ar[2]=3
print(data)  #[1. 2. 1.]
arr_as[2]=3
print(data)  #[1. 2. 3.]

总结:

相同点:array和asarray都可以将数组转化为ndarray对象。区别:当参数为一般数组时,两个函数结果相同;当参数本身就是ndarray类型时,array会新建一个ndarray对象,作为参数的副本,但是asarray不会新建,而是与参数共享同一个内存。重点就是这个共享内存。
 

参考:

 

 

 

 

 

 

 

 

 

<think>好的,用户遇到了一个TypeError,提示np.matrix不被支持,需要转换为numpy数组。首先,我需要回忆一下numpynp.matrixnp.array的区别。np.matrix是二维的,而np.array可以是多维的,而且现在np.matrix已经被弃用了,所以用户需要转换。 根据用户提到的错误信息,推荐使用np.asarray或者np.array来转换。查阅引用[1][2],里面提到np.matrix已被弃用,应该用np.asarray转换。那具体应该怎么做呢? 可能的解决方法有两种。第一种是直接使用np.asarray函数,将原来的np.matrix对象作为参数传入,这样会得到一个ndarray。比如,如果原来的变量是mat,那么arr = np.asarray(mat)。这样转换后的数组原矩阵共享数据,不会复制,所以效率比较高。 第二种方法是使用矩阵对象的A1属性。mat.A1会返回一个展平的一维数组,但用户可能需要保持二维结构的话,应该用mat.A属性,这样得到的也是ndarray,并且保持形状。这个方法在引用中没有提到,但根据numpy的文档,矩阵对象确实有AA1属性,可以转换为数组。 然后需要提醒用户注意,np.arraynp.asarray的区别。根据引用[2],np.array总是会复制数据,如果传入的是ndarray的话,而np.asarray在不需要转换dtype或者类型时不会复制。所以如果用户想确保不复制数据,应该用np.asarray,否则用np.array也可以,但可能产生不必要的复制。 另外,引用[3]中提到,有时候可能需要处理recarray的情况,但这里的问题是关于matrix的转换,所以可能不需要这一步。不过可以提到其他可能的情况,比如从DataFrame转换,但用户的问题里没有提到pandas,所以可能不需要。 接下来需要给出示例代码,让用户能清楚如何操作。比如,先创建一个np.matrix,然后展示如何用np.asarray转换,或者用.A属性。同时,要指出两者的区别,比如是否复制数据,保持维度等。 最后,总结一下步骤,并建议用户检查代码中是否有其他地方还在使用np.matrix,替换成np.array,以避免未来的问题。同时,提醒用户如果遇到其他类似结构,如recarray,可以查阅相关文档处理。</think>[逐步解答] 将`np.matrix`转换为NumPy数组以避免TypeError错误的方法如下: ### 方法1:使用`np.asarray()` ```python import numpy as np # 原始矩阵 mat = np.matrix([[1, 2], [3, 4]]) # 转换为numpy数组(共享内存,不复制数据) arr = np.asarray(mat) ``` - 特点:保留原有维度(二维),原矩阵共享数据内存[^2] ### 方法2:使用矩阵对象的`.A`属性 ```python # 直接通过属性转换(等效于np.asarray) arr = mat.A ``` - 特点:返回`ndarray`类型,`np.asarray(mat)`等价 ### 方法3:使用`np.array()`强制转换 ```python # 显式创建新数组(可能复制数据) arr = np.array(mat) ``` - 特点:创建新内存空间存储数据,适合需要独立副本的场景[^2] ### 验证转换结果 ```python print(type(arr)) # 输出应显示 <class 'numpy.ndarray'> print(arr.shape) # 应保持原有维度,例如 (2, 2) ``` ### 重要区别说明 | 方法 | 内存复制 | 适用场景 | |---------------|----------|--------------------------| | `np.asarray()`| 否 | 需要保持原数据引用时使用 | | `.A`属性 | 否 | 矩阵对象直接转换 | | `np.array()` | 是 | 需要独立数据副本时使用 | ### 扩展建议 如果数据来自其他来源(如Pandas DataFrame),可先转换为NumPy数组: ```python # 适用于Pandas数据结构转换 import pandas as pd df = pd.DataFrame([[1,2],[3,4]]) arr = np.asarray(df.values) # 或 df.to_numpy() ``` [^1]: 根据NumPy官方警告,`np.matrix`将在1.2版本后完全移除 : 数据转换方法的选择会影响内存使用效率 [^3]: 特殊数据结构需要额外处理步骤
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值