文章目录


数据分析-numpy.数组的基本函数、复制和指代

一、数组的基本运算函数

◐ 常见运算函数

以下是学习过程中看到的numpy数组中常见的运算方法,分享一下~
有些就没做具体的案例展示

【Python】数据分析.numpy.数组的基本运算函数、复制和指代_数组


返回顶部


◐ 案例

import numpy as np

t = np.arange(6)
print(t)
# [0 1 2 3 4 5]

#返回输入数组以e、2为底的指数结果
print(np.exp(t))
# [ 1. 2.71828183 7.3890561 20.08553692 54.59815003 148.4131591 ]
print(np.exp2(t))
# [ 1. 2. 4. 8. 16. 32.]

#返回数组元素的正弦、余弦、正切值
print(np.sin(t))
# [ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427]
print(np.cos(t))
# [ 1. 0.54030231 -0.41614684 -0.9899925 -0.65364362 0.28366219]
print(np.tan(t))
# [ 0. 1.55740772 -2.18503986 -0.14254654 1.15782128 -3.38051501]

#两个数组相加、减、乘、除
t1 = np.arange(7,13)
print(t1)
# [ 7 8 9 10 11 12]
print(np.add(t,t1))
# [ 7 9 11 13 15 17]
print(np.subtract(t,t1))
# [-7 -7 -7 -7 -7 -7]
print(np.multiply(t,t1))
# [ 0 8 18 30 44 60]
print(np.divide(t,t1))
# [0. 0.125 0.22222222 0.3 0.36363636 0.41666667]

返回顶部


二、复制和指代

2.1 完全不复制

赋值操作属于完全不复制数组的一类操作:简单的赋值不拷贝数组对象或它们的数据

import numpy as np

a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9 ]

b = a #进行赋值操作
print(b)
# [0 1 2 3 4 5 6 7 8 9]

a[2] = 100
print(a)
print(b)
# [ 0 1 100 3 4 5 6 7 8 9]
# [ 0 1 100 3 4 5 6 7 8 9]

b[2] = 10
print(a)
print(b)
# [ 0 1 10 3 4 5 6 7 8 9]
# [ 0 1 10 3 4 5 6 7 8 9]

返回顶部


2.2 view() 返回指代 — 浅复制

不同的变量可以指向同一个数组。使用view()方法可以生成一个数组对象,指代同一个数组。

m = np.arange(12).reshape(4,3)
print(m)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]

n = m.view()
print(n is m)
# False
n[0,2] =1314

print(m)
# [[ 0 1 1314]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]

m[0, 2] = 520
print(n)
print(m)
# [[ 0 1 520]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
# [[ 0 1 520]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]

返回顶部


3.深度复制

copy()方法会创建一个新的数组对象,而不是建立一个对原数组的索引。简单地说,就是原数组和新数组没有任何关系,任何对新数组的改变都不会影响到原数组。

# 深度复制
z = np.arange(12).reshape((3,4))

y = z.copy()
print(y.base is z)
# False

y[0,0] = 100
print(z)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(y)
# [[100 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]

通过对比我们可以发现指代与复制的区别,就是对原数组有没有产生影响。

更多详情参见大佬博文:Python学习4 ----Numpy3种复制操作对比

返回顶部