1.numpy数组中":“,"::"和”-"的意义
分片功能
a[1: ] 表示该列表中的第1个元素到最后一个元素,而,a[ : n]表示从第0个元素到第n个元素(不包括n)
import numpy as np
POP_SIZE = 3
total_size = 10
idx = np.arange(total_size)
good_idx_1 = idx[-POP_SIZE:]
good_idx_2 = idx[:-POP_SIZE]
good_idx_3 = idx[POP_SIZE:]
good_idx_4 = idx[:POP_SIZE]
print("good_idx_1", good_idx_1)
print("good_idx_2", good_idx_2)
print("good_idx_3", good_idx_3)
print("good_idx_4", good_idx_4)
# good_idx_1 [7 8 9]
# good_idx_2 [0 1 2 3 4 5 6]
# good_idx_3 [3 4 5 6 7 8 9]
# good_idx_4 [0 1 2]
测试代码
import numpy as np
b = np.arange(start=0, stop=24, dtype=int)
print('b.shape', b.shape)
# b.shape (24,)
b1 = b.reshape((4, 2, 3))
print('the value of b1\n', b1)
# the value of b1
# [[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]
#
# [[12 13 14]
# [15 16 17]]
#
# [[18 19 20]
# [21 22 23]]]
print('b1[-1]\n', b1[-1])
# 从最外层的维度分解出最后一个模块
# b1[-1]
# [[18 19 20]
# [21 22 23]]
for a in b1[-1]:
print('s')
# 在这个模块中有两个小的模块,所以程序运行两次
# s
# s
print('b1[:-1]\n', b1[:-1])
# 从最外层的模块中分解出除最后一个子模块后其余的模块
# b1[:-1]
# [[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]
#
# [[12 13 14]
# [15 16 17]]]
for a1 in b1[:-1]:
print('s')
# 在这个模块中有三个小的模块,所以程序运行两次
# s
# s
# s
print('b1[-1:]\n', b1[-1:])
# 写在最后一个维度的":"没有实质性作用,此处表示的意思和b1[-1]相同
# b1[-1:]
# [[[18 19 20]
# [21 22 23]]]
print('b1[:,-1]\n', b1[:, -1])
# 表示取出最外层的所有维度后每一个子模块中选择最后一个子模块
# b1[:,-1]
# [[ 3 4 5]
# [ 9 10 11]
# [15 16 17]
# [21 22 23]]
print('b1[:,:,-1]\n', b1[:, :, -1])
# 表示取最里层维度的最后一个元素重新组成新的元组
# b1[:,:,-1]
# [[ 2 5]
# [ 8 11]
# [14 17]
# [20 23]]
::具有分片功能以及取反功能
#分块功能
>>> s = range(20)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]
####################################################################
#取反功能
>>> a=numpy.array(numpy.arange(18).reshape(3,3,2))
>>> a
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]]])
>>> a[...,::-1]
array([[[ 1, 0],
[ 3, 2],
[ 5, 4]],
[[ 7, 6],
[ 9, 8],
[11, 10]],
[[13, 12],
[15, 14],
[17, 16]]])
2.concatenate函数
concatenate
concatenate((a1, a2, …), axis=0)
数组拼接函数
参数:
a1,a2……为要拼接的数组
axis为在哪个维度上进行拼接,默认为0
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可.
np.concatenate((a, b), axis=1)会报错
3.numpy.asarray()用法及代码示例函数
Python numpy.asarray()用法及代码示例
当我们要将输入转换为数组时,使用numpy.asarray()function。输入可以是列表,元组列表,元组,元组元组,列表元组和ndarray。
用法: numpy.asarray(arr, dtype=None, order=None)
参数:
arr :[数组]输入数据,可以转换为数组的任何形式。这包括列表,元组列表,元组,元组元组,列表元组和ndarray。
dtype :[数据类型,可选]默认情况下,从输入数据中推断出数据类型。
order :是使用行优先(C-style)还是列主要(Fortran-style)内存表示形式。默认为“ C”。
Return :[ndarray]数组对arr的解释。如果输入已经是具有匹配dtype和顺序的ndarray,则不执行复制。如果arr是ndarray的子类,则返回基类ndarray。
示例:
#数组
import numpy as geek
my_list = [1, 3, 5, 7, 9]
print ("Input list:", my_list)
out_arr = geek.asarray(my_list)
print ("output array from input list:", out_arr)
>>>Input list: [1, 3, 5, 7, 9]
>>>output array from input list: [1 3 5 7 9]
##################################################################
#元组数组
my_tuple = ([1, 3, 9], [8, 2, 6])
print ("Input touple:", my_tuple)
out_arr = geek.asarray(my_tuple)
print ("output array from input touple:", out_arr)
>>>Input touple: ([1, 3, 9], [8, 2, 6])
>>>output array from input touple: [[1 3 9]
>>>[8 2 6]]