NumPy数组元素增删改查

NumPy 数组元素的增删改查主要有以下方法:

resize
返回指定形状的新数组。

append
将元素值添加到数组的末尾。

insert
沿规定的轴将元素值插入到指定的元素前。

delete
删掉某个轴上的子数组,并返回删除后的新数组。

argwhere
返回数组内符合条件的元素的索引值。

unique
用于删除数组中重复的元素,并按元素值由大到小返回一个新数组。

  1. numpy.resize()

numpy.resize() 返回指定形状的新数组

numpy.resize(arr, shape)

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a)
#a数组的形状
print(a.shape)
b = np.resize(a,(3,2))
#b数组
print (b)
#b数组的形状
print(b.shape)
#修改b数组使其形状大于原始数组,会在那些比原来多的位置上重复前面的元素
b = np.resize(a,(3,3))
print(b)

这里需要区别 resize() 和 reshape() 的使用方法,它们看起来相似,实则不同。resize 仅对原数组进行修改,没有返回值,而 reshape 不仅对原数组进行修改,同时返回修改后的结果。

  1. numpy.append()

在数组的末尾添加值,它返回一个一维数组。

numpy.append(arr, values, axis=None)

arr:输入的数组;

values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致;

axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反。

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
#向数组a添加元素
print (np.append(a, [7,8,9]))

#沿轴 0 添加元素
print (np.append(a, [[7,8,9]],axis = 0))
#沿轴 1 添加元素
print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))
  1. numpy.insert()

表示沿指定的轴,在给定索引值的前一个位置插入相应的值,如果没有提供轴,则输入数组被展开为一维数组。numpy.insert(arr, obj, values, axis)

arr:要输入的数组
obj:表示索引值,在该索引值之前插入
values 值;values:要插入的值
axis:指定的轴,如果未提供,则输入数组会被展开为一维数组

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

#不提供axis的情况,会将数组展开
print (np.insert(a,3,[11,12]))

#沿轴 0 水平方向
print (np.insert(a,1,[11],axis = 0))

#沿轴 1 垂直方向
print (np.insert(a,1,11,axis = 1))
  1. numpy.delete()

该方法表示从输入数组中删除指定的子数组,并返回一个新数组。它与 insert() 函数相似,若不提供 axis 参数,则输入数组被展开为一维数组。

numpy.delete(arr, obj, axis)

arr:要输入的数组
obj:整数或者整数数组,表示要被删除数组元素或者子数组
axis:沿着哪条轴删除子数组

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
a = np.arange(12).reshape(3,4)
#a数组
print(a)
#不提供axis参数情况
print(np.delete(a,5))

#删除第二列
print(np.delete(a,1,axis = 1))

#删除经切片后的数组
a = np.array([1,2,3,4,5,6,7,8,9,10])
print (np.delete(a, np.s_[::2]))
  1. numpy.argwhere()

该函数返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标。

1
2
3
4
5
6
import numpy as np
x = np.arange(6).reshape(2,3)
print(x)
#返回所有大于1的元素索引组成的数组
y=np.argwhere(x>1)
print(y)
  1. numpy.unique()

用于删除数组中重复的元素

语法格式:numpy.unique(arr, return_index, return_inverse, return_counts)

arr:输入数组,若是多维数组则以一维数组形式展开;

return_index:如果为 True,则返回新数组元素在原数组中的位置(索引);

return_inverse:如果为 True,则返回原数组元素在新数组中的位置(索引);

return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
a = np.array([5,2,6,2,7,5,6,8,2,9])
print (a)
#对a数组的去重
uq = np.unique(a)
print (uq)

#数组去重后的索引数组
u,indices = np.unique(a, return_index = True)
#打印去重后数组的索引
print(indices)

#去重数组的下标:
ui,indices = np.unique(a,return_inverse = True)
print (ui)
#打印下标
print (indices)

#返回去重元素的重复数量
uc,indices = np.unique(a,return_counts = True)
print (uc)
元素出现次数:
print (indices)

NumPy位运算

NumPy 中提供了以下按位运算函数:

bitwise_and()
该函数对数组中整数的二进制数进行“按位与”运算

1
2
3
4
5
6
import numpy as np 
a = 10
b = 12
print("a的二进制数:",bin(a))
print("b的二进制数:",bin(b))
print("将a与b执行按位与操作:",np.bitwise_and(a,b))

如果两个的二进制数相对应的位都为 1,那么执行位与运算后,该位的结果就为 1,否则就为 0。

上述示例:a 与 b 位与运算的结果为 1000,因此它的十进制结果为 8。

bitwise_or()

bitwise_or() 对数组中整数的二进制数执行“按位或”运算。

1
2
3
4
5
6
7
import numpy as np
a,b = 13,17
print ('13 和 17 的二进制数:')
print (bin(a), bin(b))

print ('13 和 17 的位或:')
print (np.bitwise_or(13, 17))

对于按位或运算,只要相对应的二进制位上有一个为 1,那么它的运算结果就位 1,否则为 0,其真值表如下:

Invert()

该方法对数组中整数做按位取反运算,也就是 0 变成 1,1 变为 0。若是有符号的负整数,取其二进制数的补码,并执行 +1 操作。对于有符号二进制数,其最高位为 0, 表示正数;最高位为 1, 表示负数。

1
2
3
4
5
6
7
import numpy as np 
#数据类型为无符号整型uint8
arr = np.array([20],dtype = np.uint8)
print("二进制表示:",np.binary_repr(20,8))
print(np.invert(arr))
#进行取反操作
print("二进制表示: ", np.binary_repr(235,8))

注意:上述示例中,np.binary_repr 函数用来设置二进制数的位数。若对补码概念不熟悉,可参考百度百科《补码》。

left_shift()

该方法把数组元素的二进制数向左移动到指定位置,而其返回值所对应的二进制数,则会从右侧追加相等数量的 0(移动了多少位便追加多少个0)。

1
2
3
4
5
6
7
import numpy as np
#移动三位后的输出值
print (np.left_shift(20,3)
#打印移动后20的二进制数
print (np.binary_repr(20, width = 8))
#函数返回值的二进制数
print (np.binary_repr(160, width = 8))

right_shift()

right_shift() 将数组中元素的二进制数向右移动到指定位置,其返回值对应的二进制数会从左侧追加相等数量的 0。该函数使用与 left_shift() 恰好相反。

1
2
3
4
5
6
7
import numpy as np
#将40右移两位后返回值:
print (np.right_shift(40,2))
#移动后40的二进制数:
print (np.binary_repr(40, width = 8))
#移动后返回值的二进制数:
print (np.binary_repr(10, width = 8))

NumPy字符串处理函数

NumPy 提供了许多字符串处理函数,它们被定义在用于处理字符串数组的 numpy.char 这个类中,这些函数的操作对象是 string_ 或者 unicode_ 字符串数组。

add()
对两个数组相应位置的字符串做连接操作。

multiply()
返回多个字符串副本,比如将字符串“ hello”乘以3,则返回字符串“ hello hello hello”。

center()
用于居中字符串,并将指定的字符,填充在原字符串的左右两侧。

capitalize()
将字符串第一个字母转换为大写。

title()
标题样式,将每个字符串的第一个字母转换为大写形式。

lower()
将数组中所有的字符串的大写转换为小写。

upper()
将数组中所有的字符串的小写转换为大写。

split()
通过指定分隔符对字符串进行分割,并返回一个数组序列,默认分隔符为空格。

splitlines()
以换行符作为分隔符来分割字符串,并返回数组序列。

strip()
删除字符串开头和结尾处的空字符。

join()
返回一个新的字符串,该字符串是以指定分隔符来连接数组中的所有元素。

replace()
用新的字符串替换原数组中指定的字符串。

decode()
用指定的编码格式对数组中元素依次执行解码操作。

encode()
用指定的编码格式对数组中元素依次执行编码操作。

numpy.char.add()

numpy.char.add() 将两个数组对应位置的字符串元素进行连接

1
2
import numpy as np  
print(np.char.add(['welcome','url'], [' to 漂亮鬼 net','is 1yzf2zst.github.io'] ))

numpy.char.multiply()
该函数将指定的字符串进行多次拷贝,并将拷贝结果返回

1
2
import numpy as np
print (np.char.multiply('1yzf2zst.github.io'',3))

numpy.char.center()

numpy.char.center() 用于居中字符串

语法格式:np.char.center(string, width, fillchar)

string: 代表字符串,width: 表示长度,fillchar: 要填充的字符

1
2
import numpy as np  
print(np.char.center("1yzf2zst.github.io", 20, '*'))

numpy.char.capitalize()

numpy.char.capitalize() 将字符串的第一个字母转换为大写

1
2
import numpy as np
print (np.char.capitalize('python'))

numpy.char.title()

numpy.char.title() 将字符串数组中每个元素的第一个字母转换为大写

1
2
import numpy as np  
print(np.char.title("welcome to china"))

numpy.char.lower()

numpy.char.lower() 将字符串数组中每个元素转换为小写

1
2
import numpy as np  
print(np.char.lower("WELCOME TO MYHOME"))

numpy.char.upper()
numpy.char.upper() 将数组中的每个元素转换为大写

1
2
import numpy as np
print(np.char.upper("Welcome To Python"))

numpy.char.split()

该函数通过指定分隔符对字符串进行分割,并返回数组序列
默认情况下,分隔符为空格

1
2
import numpy as np  
print(np.char.split("Welcome To Python"),sep = " ")

numpy.char.splitlines()
以换行符作为分隔符来分割字符串,并返回一个数组序列

1
2
3
import numpy as np  
print("Splitting the String line by line..")
print(np.char.splitlines("Welcome\nTo\nPython"))

numpy.char.strip()
用于移除开头或结尾处的空格。

1
2
3
4
import numpy as np  
print("原字符串:",str)
str = " welcome to Python "
print(np.char.strip(str))

numpy.char.join()

numpy.char.join() 通过指定的分隔符来连接数组中的元素或字符串。

1
2
3
4
import numpy as np
print (np.char.join(':','Love'))
#也可指定多个分隔符
print (np.char.join([':','-'],['Love','Python']))

numpy.char.replace()
numpy.char.replace() 使用新字符替换字符串中的指定字符

1
2
3
4
5
import numpy as np 
str = "Welcome to China"
print("原字符串:",str)
#更改后字符串
print(np.char.replace(str, "Welcome to","Hello"))

numpy.char.encode()与decode()
默认以utf-8的形式进行编码与解码

1
2
3
4
5
6
7
import numpy as np 
#cp500国际编码
encode_str = np.char.encode("Welcome to China", 'cp500')
decode_str =np.char.decode(encode_str, 'cp500')
print(encode_str)
print(decode_str)