专栏首页小白编程初探numpy——广播和数组操作函数

初探numpy——广播和数组操作函数

numpy广播(Broadcast)

若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算

import numpy as np

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

print(a+b,'\n')
print(a*b)
[[ 2  6 10]
 [ 6 10 14]]

[[ 1  8 21]
 [ 8 25 48]]

若两个数组形状不同,且有一个数组维度为1,则会触发广播机制

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

# 等同于np.array([[1,2,3],[4,5,6]])与np.array([1,2,3],[1,2,3])运算
print(a+b,'\n')
print(a*b)
[[2 4 6]
 [5 7 9]]

[[ 1  4  9]
 [ 4 10 18]]

numpy数组操作函数

修改数组形状

numpy.reshape()

不改变数据的情况下修改形状

numpy.reshape(array , newshape , order = 'C')

参数

描述

array

要修改形状的数组

newshape

整数或整数数组,新的形状应该兼容原有形状

order

'C'——按行,'F'——按列,'A'——原顺序,'K'——元素咋内存中出现的顺序

import numpy as np

a_array=np.arange(16)
print(a_array,'\n')

b_array=np.reshape(a_array,[4,4])
print(b_array,'\n')

# 也可以打点调用
c_array=a_array.reshape([2,8])
print(c_array)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

[[ 0  1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14 15]]

numpy.ndarray.flat

numpy.ndarray.flat为数组元素迭代器

array=np.arange(9).reshape([3,3])
print(array,'\n')

# 按行遍历数组
for row in array:
    print(row)
    
# 使用数组元素迭代器
for element in array.flat:
    print(element)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

[0 1 2]
[3 4 5]
[6 7 8]
0
1
2
3
4
5
6
7
8

numpy.ndarray.flatten和numpy.ravel

  • numpy扁平化函数
  • numpy.ndarray.flatten返回一份数组拷贝,对拷贝内容的修改不影响原始数值;
  • numpy.ravel返回一个数组的视图,修改视图时会影响原始数组
numpy.ndarray.flatten(order = 'C')
numpy.ravel(order = 'C')

参数

描述

order

'C'——按行,'F'——按列,'A'——原顺序,'K'——元素咋内存中出现的顺序

array=np.arange(16).reshape([4,4])
print(array,'\n')

print(array.flatten(),'\n')
print(array.ravel())
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
a_array=np.arange(16).reshape([4,4])
print(a_array,'\n')

#创建和a_array同样的数组b_array
b_array=a_array.copy()

c_array=a_array.ravel()
d_array=array.flatten()

print('c_array:')
print(c_array)
print('d_array:')
print(d_array,'\n')

c_array[1]=100
d_array[1]=100

print('a_array:')
print(a_array)
print('b_array:')
print(b_array,'\n')
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

c_array:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
d_array:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]

a_array:
[[  0 100   2   3]
 [  4   5   6   7]
 [  8   9  10  11]
 [ 12  13  14  15]]
b_array:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

翻转数组

transpose和ndarray.T

  • numpy数组转置函数
a_array=np.arange(16).reshape([4,4])
print('a_array:\n',a_array)

print('使用transpose后:')
print(np.transpose(a_array))
print('使用.T转置后:')
print(a_array.T)
a_array:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
使用transpose后:
[[ 0  4  8 12]
 [ 1  5  9 13]
 [ 2  6 10 14]
 [ 3  7 11 15]]
使用.T转置后:
[[ 0  4  8 12]
 [ 1  5  9 13]
 [ 2  6 10 14]
 [ 3  7 11 15]]

numpy.swapaxes

  • numpy用于交换数组两个轴的函数
numpy.swapaxes(arr , axis1, axis2)

参数

描述

arr

输入数组

axis1

对应数组第一个轴

axis2

对应数组第二个轴

array=np.arange(8).reshape(2,2,2)
print(array)

# 交换第零个轴和第二个轴
print(np.swapaxes(array,0,2))
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]

(0)000->(0)000

(1)001->(4)100

(2)010->(2)010

(3)011->(6)110

(4)100->(1)001

(5)101->(5)101

(6)110->(3)011

(7)111->(7)111

本文分享自微信公众号 - 小白也编程(program_learning),作者:LRainner

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 初探numpy——切片和索引

    LRainner
  • 初探numpy

    LRainner
  • 初探numpy——numpy常用通用函数

    快速的逐元素数组函数,也可以称为ufunc,对ndarray数据中的元素进行逐元素操作的函数

    LRainner
  • PHP数组array类常见操作示例

    array_diff(arr1,arr2);//计算数组的差集(对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值。)

    砸漏
  • python list定义并初始化长度

    使用Python的人都知道range()函数很方便,今天再用到它的时候发现了很多以前看到过但是忘记的细节。这里记录一下range(),复习下list的slid...

    py3study
  • 浅谈PHP array_search 和 in_array 函数效率问题

    在一个接口中,发现非常耗时,排查原因发现 array_search 查找数组中的元素的 key 时,效率随着数组变大,耗时增加。特别是大数组时,非常耗时。在函数...

    砸漏
  • PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结

    本文实例总结了PHP实现二维数组(或多维数组)转换成一维数组的常见方法。分享给大家供大家参考,具体如下:

    砸漏
  • python--几种快速排序的实现以及运行时间比较

    快速排序的基本思想:首先选定一个数组中的一个初始值,将数组中比该值小的放在左边,比该值大的放在右边,然后分别对左边的数组进行如上的操作,对右边的数组进行如上的操...

    绝命生
  • 3分钟短文 | PHP数组获取最后一个元素,10个方式中哪个有错?

    我们对于 PHP 的数组操作乐此不疲,为什么?因为 PHP 编程你几乎时时刻刻都在于数组打交道,对于数组的操作熟练程度,很大一部分因素关系着代码的优劣。

    程序员小助手
  • php去重后重新排键值

    因为我们已经移除了一些元素,因此数组看起来不是正常的序列。比如我们可能会得到:array(0=>’A’,2=>’B’,5=>’C’);。在某些情况下,这不是一个...

    梦_之_旅

扫码关注云+社区

领取腾讯云代金券