可以使用如下的方式来安装numpy库:
pip install numpy
根据惯例,使用numpy库的导入方式为:
import numpy as np
在导入之后,我们可以通过:
np__version__
来查看Numpyu库的版本信息。
Numpy提供了很多方式(函数)来创建数组对象,常用的方式如下:
数组对象具有如下常用属性:
我们可以通过调用ravel或flatten方法,对数组对象进行扁平化处理。
二者的区别在于,ravel返回原数组的视图,而flatten返回原数组的拷贝。
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
[('age', 'i1')]
[10 20 30]
[('abc', 21, 500), ('xyz', 18, 750)]
每个内建类型都有一个唯一定义它的字符代码:
[[1, 2] [3, 4] [5, 6]]
[[[ 0, 1, 2] [ 3, 4, 5] [ 6, 7, 8] [ 9, 10, 11]] [[12, 13, 14] [15, 16, 17] [18, 19, 20] [21, 22, 23]]]
[1 2 3]
[1 2 3]
[(1, 2, 3) (4, 5)]
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改后的数组是: 0 5 10 15 20 25 30 35 40 45 50 55
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
原始数组的转置是: [[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]
修改后的数组是: 0 5 10 15 20 25 30 35 40 45 50 55
C风格是横着顺序
F风格是竖着的顺序
原始数组是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改后的数组是: [[ 0 10 20 30] [ 40 50 60 70] [ 80 90 100 110]]
第一个数组: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
第二个数组: [1 2 3 4]
修改后的数组是: 0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
原始数组: [[0 1 2 3] [4 5 6 7]]
调用 flat 函数之后: 5
原数组: [[0 1 2 3] [4 5 6 7]]
展开的数组:默认是A [0 1 2 3 4 5 6 7]
以 F 风格顺序展开的数组: [0 4 1 5 2 6 3 7]
原数组: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
转置数组: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]
作者|Soner Yıldırım
编译|VK
来源|Towards Data Science
机器学习和深度学习模型需要大量的数据。它们的性能在很大程度上取决于数据量。因此,我们倾向于收集尽可能多的数据,以建立一个稳健和准确的模型。数据以多种不同的格式收集,从数字到图像,从文本到声波。然而,我们需要将数据转换为数字以便对其进行分析和建模。
仅仅将数据转换为标量(单个数字)是不够的。随着数据量的增加,使用标量的 *** 作开始变得低效。我们需要向量化或矩阵运算来有效地进行计算。这就是线性代数发挥作用的地方。
线性代数是数据科学领域的重要课题之一。在这篇文章中,我们将通过使用NumPy的例子来介绍线性代数的基本概念。
线性代数中的对象(或数据结构)类型:
标量就是一个数字。我们将在下面的示例中看到,它可以用于向量化 *** 作。
向量是一组数字。例如,5个元素的向量:
我们可以在向量化运算中使用标量。对向量的每个元素执行指定的 *** 作。例如
矩阵是二维向量
它看起来像是一个包含行和列的pandas数据框。实际上,pandas数据帧被转换成矩阵,然后输入到机器学习模型中。
张量是一个N维数数组,其中N大于2。张量主要用于输入数据为三维的深度学习模型。
很难用数字来表示,但是可以把T看成3个3x2形状的矩阵。
shape方法可用于检查numpy数组的形状。
数组的大小是通过乘以每个维度的大小来计算的。
如果行数等于列数,矩阵称为方阵。因此,上面的矩阵A是一个方阵。
单位矩阵,表示为I,是一个方阵,对角线上有是,其他位置全是0。NumPy的identity函数可以用来创建任意大小的单位矩阵。
一个单位矩阵的特殊之处在于矩阵乘上它不会改变。从这个意义上讲,它与实数中的数字1相似。我们将在这篇文章的矩阵乘法部分用单位矩阵做例子。
矩阵的逆矩阵是与原始矩阵相乘得到单位矩阵的矩阵。
不是每个矩阵都有一个逆矩阵。如果矩阵A有一个逆矩阵,那么它被称为可逆或非奇异
点乘和矩阵乘法是复杂机器学习和深度学习模型的组成部分,因此对它们进行全面的了解是非常有价值的。
两个向量的点积是元素相对于其位置的乘积之和。第一个向量的第一个元素乘以第二个向量的第一个元素,依此类推。这些积的和就是点积。在NumPy中计算点积的函数是 dot() 。
让我们首先以numpy数组的形式创建两个简单的向量并计算点积。
点积计算为(12)+(24)+(36),即28。
在数据科学领域,我们主要处理矩阵。矩阵是一组以结构化方式组合的行和列向量。因此,两个矩阵的相乘涉及向量的许多点积运算。我们再看一些例子就会更清楚了。我们先用NumPy创建两个2x2矩阵。
2x2矩阵有2行2列。行和列的索引以0开头。例如,A(索引为0的行)的第一行是[4,2]的数组。A的第一列是[4,0]的数组。第一行和第一列的元素是4。
我们可以访问单个行、列或元素,如下所示:
这些是理解矩阵乘法的重要概念。
两个矩阵的相乘涉及到第一个矩阵的行和第二个矩阵的列之间的点乘。第一步是A的第一行和B的第一列之间的点积。这个点积的结果是在位置[0,0](即第一行,第一列)处得到的矩阵的元素。
因此,得到的矩阵C在第一行和第一列将有一个 (40) + (24) 。C[0,0]=18。
下一步是A的第一行和B的第二列的点积。
C在第一行和第二列有一个(40)+(24)。C[0,1]=8。
第一行A已完成,因此我们从A的第二行开始,并遵循相同的步骤。
C在第二行和第一列有一个(04)+(31)。C[1,0]=3。
最后一步是A的第二行和B的第二列之间的点积。
C在第二行和第二列有一个(00)+(34)。C[1,1]=12。
我们已经看到它是如何一步一步完成的。所有这些 *** 作都是用 npdot *** 作:
你可能还记得,我们已经提到过,单位矩阵乘以任何矩阵时不会改变矩阵。让我们举个例子。
我们还提到,当一个矩阵乘以它的逆矩阵时,结果就是单位矩阵。让我们先创建一个矩阵,然后求它的逆矩阵。我们可以利用NumPy函数 linalginv() 求矩阵的逆。
用B的逆矩阵C乘以B:
我们得到了单位矩阵。
正如我们在向量点积中回忆的那样,两个向量的长度必须相同才能有一个点积。矩阵乘法中的每个点积运算都必须遵循这个规则。点积是在第一个矩阵的行和第二个矩阵的列之间进行的。因此,第一个矩阵的行和第二个矩阵的列的长度必须相同。
矩阵乘法的要求是第一个矩阵的列数必须等于第二个矩阵的行数。
例如,我们可以用一个3x2矩阵乘以一个2x3矩阵。
结果矩阵的形状将是3x3,因为我们对A的每一行进行3点积运算,A有3行。确定结果矩阵形状的一种简单方法是从第一个矩阵中提取行数,从第二个矩阵中提取列数:
我们已经讨论了线性代数的基本运算。这些基本 *** 作是复杂机器学习和深度学习模型的构建基础。在模型优化过程中,需要进行大量的矩阵乘法运算。因此,了解基础知识也是非常重要的。
谢谢你的阅读。如果你有任何反馈,请告诉我。
原文链接: >
#include "memoryh"
class IntArray
{
public:
IntArray(int size); //size为数组大小,所有元素初始化为0
~IntArray();
int size() const;//获取数组大小
int& item(int i);//要求判断i是否越界,如越界,终止
void assign(IntArray&a);//数组a的所有元素复制到this数组的对应位置。要求判断a的大小是否超过this数组,如超出,终止
void display();//输出数组所有元素
private:
int m_iSize ;
int m_pData ;
};
IntArray::IntArray(int size)
{
m_iSize = size ;
m_pData = new int[size];
memset(m_pData,0,sizeof(int)size);
}
IntArray::~IntArray()
{
delete m_pData ;
}
int IntArray::size() const
{
return m_iSize ;
}
int& IntArray::item(int i)
{
if( i >= m_iSize )
return m_pData[0];
return m_pData[i];
}
void IntArray::assign(IntArray&a)
{
if( asize() > size())
return ;
m_iSize = asize();
for(int i = 0 ; i < m_iSize ; i++ )
m_pData[i] = am_pData[i];
}
void IntArray::display()
{
for(int i = 0 ; i < m_iSize ; i++ )
printf("%d ",m_pData[i]);
printf("\n");
}
void main()
{
IntArray intArr(5);
intArrdisplay();
for(int i = 0 ; i < intArrsize() ; i++)
intArritem(i) = i2+5 ;
intArrdisplay();
}
这个差不多可以参考一下!亲
import numpy as up
from collections import Counter
data = nparray([11,2,3,4,4,5])
Counter(data) # {label:sum(label)}
#简单方法sum(data==4)
第二种:npsize()
npsum() 有个特性,当数组为[True,False]时会累加True的个数
所以当我们需要计算数组array中值value的个数时,使用语句:npsum(data == value) 即可
当我们需要计算数组array中大于值value的个数时,使用语句:npsum(data > value) 即可
AA = nparray
AAastype(npint)
一个错误的例子 ,以下的customersAge有点像method,每次执行customersAge都会生成新的随机数组。
2018727
以上就是关于numpy 使用全部的内容,包括:numpy 使用、Python—Numpy库的用法、NumPy解释线性代数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)