numpy ndarray学习<一> 基础

本文介绍了如何使用numpy创建ndarray,包括其构成、索引、切片、基本算术运算,以及矩阵乘法。通过实例演示了ndarray的min(), max(), sum()等函数。涵盖了广播、整数计算和常见运算符应用。
摘要由CSDN通过智能技术生成

0. ndarray结构:

numpy的特点之一就是N维数组--ndarray.  

ndarray是一系列同类型数据的集合,其中的每个元素在内存中都有相同的存储大小区域。

ndarray内部,由以下部分组成:

A. 一个指向数据的指针。

B. 元素数据类型或dtype. 用来确定每个元素在内存中的大小。

C. 一个表示ndarray形状(shape)的元组。用来确定各维度的大小。

D. 一个跨度(stride)元组。用来确定跨越到下个元素的步长。

1. ndarray创建:

要创建ndarray. 只需要调用np.array():

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

import numpy as np

arr1 = np.array([3,4,5])
print("arr1:",arr1)
print("type:",type(arr1))
print("shape:",arr1.shape)


arr2 = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]])
print("arr2:",arr2)
print("type:",type(arr2))
print("shape:",arr2.shape)

arr3 = np.array([1, 2, 3], ndmin= 3)
print("arr3:",arr3)
print("type:",type(arr3))
print("shape:",arr3.shape)

arr1: [3 4 5]
type: <class 'numpy.ndarray'>
shape: (3,)

arr2: [[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
type: <class 'numpy.ndarray'>
shape: (4, 3)

arr3: [[[1 2 3]]]
type: <class 'numpy.ndarray'>
shape: (1, 1, 3)

2. ndarry的索引:

索引就是通过一个无符号整数获取ndarray的值。

对一维ndarray, 单个索引值表示元素标量。

对二维ndarray,单个索引值表示对应的一维ndarray.

对N维ndarray,单个索引值表示对应的(N-1)维ndarray.

arr1 = np.array([3,4,5])\
print(arr1[1],"\n")

4 


arr2 = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]])
print(arr2[1], "\n")

[4 5 6] 

print(arr2[1][2])

6

因为既然arr2[1]是一个一维ndarray. 那arr2[1][2]就是这个一维数组[4,5,6]的第index=2个。即为6.

更常用的方法是:

print(arr2[1,2])

6

3.  ndarry的切片:

4. ndarray的min(), max(), sum()等:

ndarray.min(axis=Noneout=Nonekeepdims=Falseinitial=<no value>where=True)

ndarray.max(axis=Noneout=Nonekeepdims=Falseinitial=<no value>where=True)

ndarray.sum(axis=Nonedtype=Noneout=Nonekeepdims=Falseinitial=0where=True)

它们等价于:

numpy.amin(aaxis=Noneout=Nonekeepdims=<no value>initial=<no value>where=<no value>)

numpy.amax(aaxis=Noneout=Nonekeepdims=<no value>initial=<no value>where=<no value>)

numpy.sum(aaxis=Nonedtype=Noneout=Nonekeepdims=<no value>initial=<no value>where=<no value>)

它们分别是:

返回最小值--沿着给定的axis

返回最大值--沿着给定的axis.

返回元素的和--沿着给定的axis.

arr4 = np.array([[1, 2, 3], [4, 5, 6]])
print("min()", arr4.min())
print("min(0)", arr4.min(0))
print("min(1)", arr4.min(1))

axis: 

如果不选。则是全领域求最小值,最大值,和值。

如果选0. 则表明在这个轴线上求最小值,最大值,和值。

如果是shape=(m, n). 则结果是 shape(1,n)的ndarray.

arr4 = np.array([[1, 2, 3], [4, 5, 6]])
print("min()", arr4.min())
print("min(0)", arr4.min(0))
print("min(1)", arr4.min(1))

min() 1
min(0) [1 2 3]
min(1) [1 4]

print("max() :", arr4.max())
print("max(0):", arr4.max(0))
print("max(1):", arr4.max(1))

max() : 6
max(0): [4 5 6]
max(1): [3 6]

5. ndarray的加减乘除:

 算术函数包含简单的加减乘除: add()subtract()multiply() 和 divide()

 也可以直接使用 “+” , “-” , “*” , "/"来进行计算。

如此,则ndarray的对应元素进行加减乘除操作。

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

print("Add:")
print(arr5 + arr6)
print(np.add(arr5, arr6))

print("Sub:")
print(arr5 - arr6)
print(np.subtract(arr5, arr6))

print("Mul:")
print(arr5 * arr6)
print(np.multiply(arr5, arr6))

print("Div:")
print(arr5 / arr6)
print(np.divide(arr5, arr6))

Add:
[[2 3 4]
 [5 6 7]]
[[2 3 4]
 [5 6 7]]
Sub:
[[-2 -1  0]
 [ 1  2  3]]
[[-2 -1  0]
 [ 1  2  3]]
Mul:
[[ 0  2  4]
 [ 6  8 10]]
[[ 0  2  4]
 [ 6  8 10]]
Div:
[[0.  0.5 1. ]
 [1.5 2.  2.5]]
[[0.  0.5 1. ]
 [1.5 2.  2.5]]

5.1:广播后的ndarray计算。

5.2:ndarray与整数计算:

先对整数进行广播,将之转换成与ndarray的shape相同。再计算。

6. 矩阵乘法:

在numpy中,可以使用numpy.ndarray的二维模式表示矩阵。也可以使用matrix表示矩阵。但推荐使用ndarray.

矩阵乘法:

如果ndarray为2维的,则numpy.dot()和np.matmul()函数结果相同。都是矩阵相乘

从 Python 3.5 和 Numpy 1.10 以后,可以使用中缀操作符 @ 计算 ndarray 间的矩阵乘法,写起来更加方便。

以下详细介绍np.dot()

numpy.dot(about=None)

如果ab都是一维数组,则它是向量的内积. (对应位相乘,然后相加)

如果ab都是二维数组,则是矩阵乘法,但首选使用matmul或。a @ b

如果ab是 0-D(标量),则等效于multiply . 并且推荐使用numpy.multiply(a, b) 或a * b。(见5.2)

举例说明矩阵相乘规则:

a = np.array([[1,2],[3,4]]) b = np.array([[11,12],[13,14]]) print(np.dot(a,b))

输出结果为:

[[37  40] 
 [85  92]]

计算式为:

[[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值