【Numpy学习笔记】

优点:numpy代码比等价的python代码快得多

1、Numpy的数组剪切

从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片:

import numpy as np

arr = np.array([[1, 2, 3, 4, 5],
			    [6, 7, 8, 9, 10]])

print(arr[1, 1:4])
结果:[7 8 9]
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
				[6, 7, 8, 9, 10]])
print(arr[0:2, 1:4])

结果:[[2 3 4]
      [7 8 9]]

返回数组中相隔的元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[::2])    
结果:[1 3 5 7]

2、副本和视图之间的区别

副本和数组视图之间的主要区别在于副本是一个新数组,而这个视图只是原始数组的视图。
副本拥有数据,对副本所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响副本。深拷贝的都是副本

视图不拥有数据,对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。
numpy的切片操作返回的是视图;或者array.view()

3、检查数组是否拥有数据

如上所述,副本拥有数据,而视图不拥有数据
每个 NumPy 数组都有一个属性 base,如果该数组拥有数据,则这个 base 属性返回 None。

4、数组重塑,reshape

注意: 重塑所需的元素在两种形状中均相等

重塑为4维数组,每个维度有3个元素
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(4, 3)

print(newarr)

#最外面的维度将具有 2 个数组,其中包含 3 个数组,每个数组包含 2 个元素:
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(2, 3, 2)

print(newarr)
未知的维

不必在 reshape 方法中为维度之一指定确切的数字。
传递 -1 作为值,NumPy 将为自动计算该数字。

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

newarr = arr.reshape(2, 2, -1)

print(newarr) 
结果:[[[1 2]
       [3 4]]
       [[5 6]
       [7 8]]]
展平数组

展平数组(Flattening the arrays)是指将多维数组转换为 1D 数组。使用 reshape(-1)

import numpy as np

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

newarr = arr.reshape(-1)

print(newarr)

结果:[1 2 3 1 5 6]

5、nditer() 迭代数组

import numpy as np

arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

for x in np.nditer(arr):
	print(x)
结果:
1
2
3
4
5
6
7
8

6、连接数组

沿行堆叠
hstack() 沿行堆叠。

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

沿列堆叠
vstack() 沿列堆叠。

import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.vstack((arr1, arr2))
print(arr)
结果:[[1 2 3]
       [4 5 6]]

沿高度堆叠(深度)
dstack() 沿高度堆叠,该高度与深度相同。

import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.dstack((arr1, arr2))
print(arr)
结果:[[[1 4]
         [2 5]
         [3 6]]]

7、拆分数组

将数组分为 3 个:

import numpy as np

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

newarr = np.array_split(arr, 3)

print(newarr)
结果:
[array([1, 2]), array([3, 4]), array([5, 6])]

如果数组中的元素少于要求的数量,它将从末尾进行相应调整。如:
将数组分为 4 部分:

import numpy as np

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

newarr = np.array_split(arr, 4)

print(newarr)
结果: 
[array([1, 2]), array([3, 4]), array([5]), array([6])]

8、搜索数组

使用 where() 方法,where返回的是下标
np.where(condition[, x, y]):满足condition选择x中元素,否则选择y中元素。

import numpy as np

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

x = np.where(arr == 4)

print(x)
#(array([3, 5, 6], dtype=int64),)

9、数组排序

import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))
结果:
[[2 3 4]
[0 1 5]]

10、数组过滤

从现有数组中取出一些元素并从中创建新数组称为过滤(filtering)。

import numpy as np

arr = np.array([61, 62, 63, 64, 65])

x = [True, False, True, False, True]

newarr = arr[x]

print(newarr)
结果:[61, 63, 65]

直接从数组创建过滤器
上例是 NumPy 中非常常见的任务,NumPy 提供了解决该问题的好方法。
创建一个仅返回大于 62 的值的过滤器数组:

import numpy as np

arr = np.array([61, 62, 63, 64, 65])

filter_arr = arr > 62

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)
#[False False  True  True  True]
#[63 64 65]

11、复数不可转为浮点数、整数,但反之都可以

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值