Numpy 数组及其运算 02

书接上回
Numpy 数组及其运算 01

1.访问数组中的元素

import numpy as np
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b)

print(b[0]) # 第一行所有元素
print(b[0][0]) # 第一行第一列的元素
print(b[0,2]) # 第一行第三列元素,等价与b[0][2]
print(b[[0,1]]) # 第一行和第二行所有元素
print(b[[0,2,1],[2,1,0]]) # 第一行第三列,第三行第二列,第二行第一列

a=np.arange(10)
print(a)
print(a[::-1]) # 反向切片
print(a[::2]) # 隔一个取一个元素
print(a[:5]) # 前五个元素

c=np.arange(25)
c.shape=5,5 # 修改数组形状
print(c)
print(c[0,2:5]) # 行下标为0且列下标介于[2,5)之间的元素
print(c[1]) # 行下标为1的所有元素值
print(c[2:5,2:5]) # 行下标和列下标都介于[2,5)之间的元素

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[1 2 3]
1
3
[[1 2 3]
 [4 5 6]]
[3 8 4]
[0 1 2 3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
[0 2 4 6 8]
[0 1 2 3 4]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
[2 3 4]
[5 6 7 8 9]
[[12 13 14]
 [17 18 19]
 [22 23 24]]

2.数组对函数运算的支持

import numpy as np
x=np.arange(0,100,10,dtype=np.floating)
print(x)
print(np.sin(x)) # 一维数组所有元素求正弦值
x=np.arange(1,10)
x.shape=3,3
print(x)
print(np.cos(x)) # 二维数组所有元素求余弦值
print(np.round(np.cos(x))) # 四舍五入
print(np.ceil(x/2)) # 向上取整
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90.]
[ 0.         -0.54402111  0.91294525 -0.98803162  0.74511316 -0.26237485
 -0.30481062  0.77389068 -0.99388865  0.89399666]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 0.54030231 -0.41614684 -0.9899925 ]
 [-0.65364362  0.28366219  0.96017029]
 [ 0.75390225 -0.14550003 -0.91113026]]
[[ 1. -0. -1.]
 [-1.  0.  1.]
 [ 1. -0. -1.]]
[[1. 1. 2.]
 [2. 3. 3.]
 [4. 4. 5.]]

3.改变数组的形状

import numpy as np
x=np.arange(1,11,1)
print(x)
print(x.shape) # 查看数组的形状
print(x.size) # 数组中元素的数量
x.shape=2,5 # 改为2行5列
print(x)
print(x.shape)
x.shape=5,-1 # -1 表示自动计算
print(x)
print(x.shape)

[ 1  2  3  4  5  6  7  8  9 10]
(10,)
10
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
(2, 5)
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]]
(5, 2)

import numpy as np
x=np.arange(1,11)
print(x)
print(x.reshape(2,5)) # reshape()方法返回新数组

'''y=np.arange(5)
y.reshape((1,10))
reshape()不能修改数组元素个数,会报错
'''
y=np.arange(5)
y.resize(1,10) # resize()可以修改数组元素个数
print(y)
print(np.resize(x,(1,3)))
print(y) # 不对原数组进行修改
[ 1  2  3  4  5  6  7  8  9 10]
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
[[0 1 2 3 4 0 0 0 0 0]]
[[1 2 3]]
[[0 1 2 3 4 0 0 0 0 0]]

4.数组布尔运算

import numpy as np
x=np.random.rand(10) # 10个随机数数组
print(x)
print(x>0.6) # 比较数组中每个元素是否大于0.6
print(x[x>0.6]) # 获取数组中大于0.6的元素
print(sum((x>0.4) & (x<0.6))) # 值大于0.4且小于0.6的元素的数量
print(np.all(x<1)) # 测试元素是否都小于1
print(np.any(x>0.8)) # 测试是否有大于0.8的元素

a=np.array([3,2,1])
b=np.array([1,2,3])
print(a>b) # 两个数组对应位置上的元素进行比较
print(a[a>b]) # 数组a中大于数组b中对应位置上元素的值

x=np.arange(1,10)
print(x[(x%2==0)&(x>5)]) # 大于5的偶数
print(x[(x%2==0)|(x>5)]) # 大于5的元素或者偶数元素
[0.55211906 0.56584398 0.87870249 0.58539001 0.30885712 0.1078724
 0.8238386  0.9755937  0.81325579 0.89010523]
[False False  True False False False  True  True  True  True]
[0.87870249 0.8238386  0.9755937  0.81325579 0.89010523]
3
True
True
[ True False False]
[3]
[6 8]
[2 4 6 7 8 9]

5.分段函数

import numpy as np
x=np.random.randint(0,10,size=(1,10))
print(x)
print(np.where(x<5,0,1)) # 元素小于5的对应0,其他对应1
x.resize((2,5))
print(x)
print(np.piecewise(x,[x<4,x>7],[lambda x:x*2,lambda x:x*3]))
#小于4的元素乘以2,大于7的元素乘以3
#其他元素变为0

print(np.piecewise(x,[x<3,(3<x)&(x<5),x>7],[-1,1,lambda x:x*4]))
# 小于3的元素变为-1
# 大于3小于5的元素变为1
# 大于7的元素乘以4
# 其他元素变为0
[[9 0 1 4 0 1 8 6 9 2]]
[[1 0 0 0 0 0 1 1 1 0]]
[[9 0 1 4 0]
 [1 8 6 9 2]]
[[27  0  2  0  0]
 [ 2 24  0 27  4]]
[[36 -1 -1  1 -1]
 [-1 32  0 36 -1]]

6.数组堆叠与合并

import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([4,5,6])

print(np.hstack((arr1,arr2))) # 水平堆叠
print(np.vstack((arr1,arr2))) # 垂直堆叠

arr3=np.array([[1],[2],[3]])
arr4=np.array([[4],[5],[6]])
print(arr3)
print(arr4)
print(np.hstack((arr3,arr4)))
print(np.vstack((arr3,arr4)))
[1 2 3 4 5 6]
[[1 2 3]
 [4 5 6]]
[[1]
 [2]
 [3]]
[[4]
 [5]
 [6]]
[[1 4]
 [2 5]
 [3 6]]
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值