numpy(二)

numpy数组副本与视图;

区别:副本是一个新数组,对副本所做的任何更改都不会影响原数组,对原数组的更改也不会影响副本。而视图只是原始数组的视图,不拥有数据,对视图做的任何更改都会影响原数组,对原数组的更改也会影响视图 。

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

x = a.copy() x即为a的副本

y = a.view() y即为a的视图

检查数组是否拥有数据

print(x.base)

print(y.base)

如果该数组拥有数据,则base属性返回None

所以副本则返回None,视图则返回原始数组

数组形状

数组的形状是每个维中元素的数量

shape:返回一个元组,每个索引具有相应元素的数量

例如:a = np.array([[1,2,3,4],[5,6,7,8]])

print(a.shape) 结果为(2,4),意思是该数组是二维的,每个维度有4个元素

数组重塑

通过重塑可以添加或删除维度或更改每个维度中的元素数量

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

new = a.reshape(4,3)

将a转换为4个数组,每个数组包含3个元素

new = a.reshape(2,3,2)

最外边有两个数组,其中包含3个数组,每个数组包含两个元素

结果为:[[[ 1  2] [ 3  4] [ 5  6]] [[ 7  8][ 9 10] [11 12]]]

重塑后的数组里边的元素要相等,否则要报错

重塑后返回的是视图

可以使用-1,这样就不用指定确切的数字

例如:new = a.reshape(2,3,-1),numpy会计算这个数字

也可以使用-1将多维转换为1维

例如:new = a.reshape(-1)

还有一些功能可以改变数组形状,这部分属于中、高级部分,将在后边讲解

数组迭代

1、遍历元素,在numpy中处理多维数组时,可以使用for循环来完成这个操作,但是必需迭代每个维度中的数组

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

           for x in a:

               for y in x:

                    for z in y:

                          print(z)

结果为:1 2 3 4 5 6 7 8 9 10 11 12

2、该方法对于高维度的数组可能很难编写

可以使用函数nditer(),就可以将上述代码简化成

for x in nop.nditer(a):

   print(x)

3、迭代不同数据类型的数组时,可以使用op_dtypes参数传递期望的数据类型,这样可以在迭代时更改元素的数据类型。nditer不会就地更改数据类型,所以需要启用额外的空间,称为buffer,在nditer()中传参flags=['buffered']即可

例如:arr = np.array([1, 2, 3])

           for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S']):

             print(x)

4、以不同的步长迭代

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

for x in np.nditer(arr[:, ::2]):

   print(x)

结果为:1 3 5 7 

5、使用 ndenumerate() 进行枚举迭代:可以迭代出元素所对应的序号

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

for idx, x in np.ndenumerate(arr):

   print(idx, x)

结果为:

(0, 0) 1
(0, 1) 2
(0, 2) 3
(0, 3) 4
(1, 0) 5
(1, 1) 6
(1, 2) 7
(1, 3) 8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值