numpy的array、asarray、asanyarray的区别

numpy的array、asarray、asanyarray的区别

从librosa.filters.mel里遇到该问题:

def mel_to_hz(mels, htk=False):
    mels = np.asanyarray(mels)

先看一个例子:

>> A = numpy.matrix(np.ones((3,3)))
>>> A
matrix([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])

如果是array:

>>> numpy.array(A)[2]=2 #将第3行全部置2
>>> A
matrix([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 1.,  1.,  1.]])
        
    # 可以看到A没变,所以array修改的是A的拷贝。   

如果是asarray:

>>> numpy.asarray(A)[2]=2
>>> A
matrix([[ 1.,  1.,  1.],
        [ 1.,  1.,  1.],
        [ 2.,  2.,  2.]])
        
# 可以看到asarray修改的A本身。

np.asanyarray :
看名字就是 as any array,就是任何形式都会被转化为数组;如果输入的已经是满足要求的数组或数组的子类,则不会复制,直接返回。

>>>a = [1, 2]
>>>np.asanyarray(a)
array([1, 2])

>>>a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
>>>np.asanyarray(a) is a
True

区别:
np.asanyarray 会返回 ndarray 或者ndarray的子类,而np.asarray 只返回 ndarray:

issubclass(np.matrix, np.ndarray)
True
>>> a = np.matrix([[1, 2]])
>>> np.asarray(a) is a #返回的不是子类。
False
>>> np.asanyarray(a) is a #np.asanyarray(a)返回是a的子类
True

这个没太理解

# 示例代码1
import numpy as np

a=np.array([[1,2,3],[4,5,6]])

print(a)
# [[1 2 3]
#  [4 5 6]]

np.array(a)[1]=[7,8,9]

print(a)
# [[1 2 3]
#  [4 5 6]]

np.asarray(a)[1]=[7,8,9]
print(a)
# [[1 2 3]
#  [7 8 9]]

np.asanyarray(a)[1]=[7,8,9]
print(a)
# [[1 2 3]
#  [7 8 9]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值