㈠ python 中np.int0是什么意思,见过8,16,32
你这问得抽象,估计是python中数据分析库,里的numpy 简写,经常写成,np
㈡ Numpy基础20问
一言以蔽之,numpy是python中基于数组对象的科学计算库。
提炼关键字,可以得出numpy以下三大特点:
因为numpy是一个python库,所以使用python包管理工具pip或者conda都可以安装。
安装python后,打开cmd命令行,输入:
即可完成安装。
n维数组(ndarray)对象,是一系列 同类数据 的集合,可以进行索引、切片、迭代操作。
numpy中可以使用 array 函数创建数组:
判断一个数组是几维,主要是看它有几个轴(axis)。
一个轴表示一维数组,两个轴表示二维数组,以此类推。
每个轴都代表一个一维数组。
比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。
一维数组一个轴:
二维数组两个轴:
三维数组三个轴:
以此类推n维数组。
numpy中常用 array 函数创建数组,传入列表或元组即可。
创建一维数组,并指定数组类型为 int :
创建二维数组:
还可以使用 arange 函数创建一维数字数组,用法类似python的 range 函数.
numpy的 random 模块用来创建随机数组。
random模块还有其他函数,这里不多说。
前面说到,数组维度即代表轴的数量。
我们可以通过数组(adarray)对象的ndim或shape属性,来查看轴的数量。
数组(ndarray)对象的 size 属性可以查看数组包含元素总数。
还可以通过 shape 属性返回元素的乘积,来计算数组元素数量。
Numpy支持的数据类型非常多,所以很适合做数值计算。
下面给出常见的数据类型:
数组(adarrry)对象提供 dtype 属性,用来查看数组类型。
前面说过,数组的 shape 属性返回一个元组,能够反映数组的形状,包括维度以及每个轴的元素数量。
那么如果给定一个数组,怎么改变其形状呢?
常用的方式有两种:
比如说我要将一个二维数组转换为三维数组。
reshape 方法可以传入整数或者元组形式的参数。
传入的参数和 shape 属性返回的元组的含义是一样的。
例如, x2.reshape(1,2,3) 是将二维数组转换成三维数组,参数个数代表要转换的维度,参数数字从左到右分别表示0轴、1轴、2轴的元素数量。
resize 方法和 reshape 方法使用形式一样,区别是 resize 方法改变了原始数组形状。
numpy一维数组的索引和切片操作类似python列表,这里不多讲。
比如说取一维数组前三个元素。
重点是对多维数组的索引和切片。
多维数组有多个轴,那么就需要对每个轴进行索引。
例如,三维数组形状为(x,y,z),分别代表:0轴有x个元素、1轴有y个元素,2轴有z个元素。
对0、1、2轴进行索引,如果取o轴第2个元素、1轴第0个元素、2轴第3个元素,那么索引形式就为[2,0,3]。
切片也是同样道理。
如果取o轴前2个元素、1轴前1个元素、2轴后2个元素,那么切片形式就为[:2,:1,-2:]。
说到迭代,大家很容易想到直接对数组直接使用 for 循环操作,对于一维数组来说,当然是可以的。
但对于多维数组,迭代是相对于0轴完成的,就是多维数组最外层的那一维。
你没有办法直接遍历数组里每一个元素,嵌套循环又太低效。
这个时候就需要用到 flat 方法,它可以将多维数组平铺为一维的迭代器。
数组(ndarray)对象提供了ravel方法,用来将多维数组展开为一维数组。
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对多个数组的算术运算通常在相应的元素上进行。
较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。
比如说一个一维数组乘以一个数字,相当于一维数组里每个元素都乘以这个数。
如果相同维度的数组进行运算,其shape相同,那么广播就是两个数组相同位数的元素进行运算。
如果两个数组维度不同,进行运算,这里就触发了广播的两个规则。
这两个规则保证了不同维度数组进行运算时,其维度自动调整成一致。
numpy提供了 transpose 函数用以对数组进行维度的调换,也就是转置操作。
转置后返回一个新数组。
当然,可以用更简单的方法。
数组对象提供了 T 方法,用于转置,同样会返回一个新数组。
numpy的 concatenate 函数用于沿指定轴连接相同形状的两个或多个数组。
numpy的 unique 函数用于去除数组中的重复元素,返回一个新数组。
unique 函数还能返回重复元素的索引、计数等信息,可去查文档自定义参数。
numpy文档
菜鸟教程
㈢ python numpy.int64 是什么类型
numpy.int64是numpy模块的int类,与python本身的int基本类型并不同。使用type()判断。
import numpy as np
nparr = np.array([1,2,3,4]) ;numpyint = nparr[0]
pyint = 1234
type(pyint) 不等于 type(numpyint)
㈣ Python基础 numpy中的常见函数有哪些
有些Python小白对numpy中的常见函数不太了解,今天小编就整理出来分享给大家。
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。
数组常用函数
1.where()按条件返回数组的索引值
2.take(a,index)从数组a中按照索引index取值
3.linspace(a,b,N)返回一个在(a,b)范围内均匀分布的数组,元素个数为N个
4.a.fill()将数组的所有元素以指定的值填充
5.diff(a)返回数组a相邻元素的差值构成的数组
6.sign(a)返回数组a的每个元素的正负符号
7.piecewise(a,[condlist],[funclist])数组a根据布尔型条件condlist返回对应元素结果
8.a.argmax(),a.argmin()返回a最大、最小元素的索引
改变数组维度
a.ravel(),a.flatten():将数组a展平成一维数组
a.shape=(m,n),a.reshape(m,n):将数组a转换成m*n维数组
a.transpose,a.T转置数组a
数组组合
1.hstack((a,b)),concatenate((a,b),axis=1)将数组a,b沿水平方向组合
2.vstack((a,b)),concatenate((a,b),axis=0)将数组a,b沿竖直方向组合
3.row_stack((a,b))将数组a,b按行方向组合
4.column_stack((a,b))将数组a,b按列方向组合
数组分割
1.split(a,n,axis=0),vsplit(a,n)将数组a沿垂直方向分割成n个数组
2.split(a,n,axis=1),hsplit(a,n)将数组a沿水平方向分割成n个数组
数组修剪和压缩
1.a.clip(m,n)设置数组a的范围为(m,n),数组中大于n的元素设定为n,小于m的元素设定为m
2.a.compress()返回根据给定条件筛选后的数组
数组属性
1.a.dtype数组a的数据类型
2.a.shape数组a的维度
3.a.ndim数组a的维数
4.a.size数组a所含元素的总个数
5.a.itemsize数组a的元素在内存中所占的字节数
6.a.nbytes整个数组a所占的内存空间7.a.astype(int)转换a数组的类型为int型
数组计算
1.average(a,weights=v)对数组a以权重v进行加权平均
2.mean(a),max(a),min(a),middle(a),var(a),std(a)数组a的均值、最大值、最小值、中位数、方差、标准差
3.a.prod()数组a的所有元素的乘积
4.a.cumprod()数组a的元素的累积乘积
5.cov(a,b),corrcoef(a,b)数组a和b的协方差、相关系数
6.a.diagonal()查看矩阵a对角线上的元素7.a.trace()计算矩阵a的迹,即对角线元素之和
以上就是numpy中的常见函数。更多Python学习推荐:PyThon学习网教学中心。
㈤ python numpy生成的矩阵 小数点问题
那就说明肯定是浮点型的,看看你怎么生成的,哪怕是一堆int中有一个float也会全变成float,因为要保证所有数据格式相同。你可以在生成这个矩阵的时候加dtype参数dtype=np.int,应该可以解决。
㈥ (Python)numpy 常用操作
不放回取样:
从列表ori中不放回地取n个数
通过这种操作,我们可以获得一个二维列表的子集:
(如果这个二维列表是图的邻接矩阵,那么就是对图进行随机采样,获得一个图的子图)
首先要注意,"+" 操作对于list和numpy.array是完全不同的
python 中的list,"+"代表拼接:
在numpy.array中,"+"代表矩阵相加
keepdim指的是维度不变,常在sum中使用。如:
会发现,keepdim之后还是二维的
这里要注意,pytorch和numpy里max()函数的返回值是不同的
pytorch:
也就是说,max(1)代表求第一维的最大值,对于二维数组来说,就是求纵向的最大值,然后,第一个返回值是最大值所形成数组,第二个返回值是最大值所在的索引。这一个技巧在机器学习的分类任务中很常用,比如我们的分类任务是把数据分成m类,那么最终我们模型的输出是m维的,对于n个样本就是n*m,如果要判断我们的模型最终的分类结果,就是找n个样本里,每个样本m维输出的最大值索引,代表样本是这个类的可能性最大。我们可以方便地用这种方式找到最大值地索引:
其中test_out是模型输出,predict_y则是分类结果
另外一点要注意的是,numpy与pytorch不同,numpy的max()只有一个返回值:
也就是说,numpy.max()不会返回最大值所在的索引
㈦ python numpy是什么库
NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了CPython的GIL(全局解释器锁),运行效率极好,是大量机器学习框架的基础库!
相关推荐:《Python基础教程》
NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:
·一个强大的N维数组对象ndrray;
·比较成熟的(广播)函数库;
·用于整合C/C++和Fortran代码的工具包;
·实用的线性代数、傅里叶变换和随机数生成函数。
NumPy的优点:
·对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得多;
·NumPy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升的性能是与数组中的元素成比例的;
·NumPy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得NumPy比纯Python代码高效得多。
当然,NumPy也有其不足之处,由于NumPy使用内存映射文件以达到最优的数据读写性能,而内存的大小限制了其对TB级大文件的处理;此外,NumPy数组的通用性不及Python提供的list容器。因此,在科学计算之外的领域,NumPy的优势也就不那么明显。
㈧ python,numpy数组如何返回最大值数组
如果是list,有max(list)
也可以自己写排序算法,比如冒泡排序
a=[3,4,2,6,3]for i in range(0,len(a)): for j in range(i+1,len(a)): first=int(a[i]) second=int(a[j]) if first<second: a[i]=a[j] a[j]=firstprint a[0]
㈨ python int()数字转换问题
这个问题的原因是你用的np.zeros(count),它的默认数据类型是float类型的,而且不管你往这个np列表传入什么类型的值,它都是自动改为float类型。注意这个float类型可不是原生的浮点类型, 虽然“看”起来差不多, 但如果用type函数的话就能看出来区别了。
有两种解决方法可以解决你的问题。
list = np.zeros(count) 改为 list = np.zeros(count,dtype=int)。 这样就不会出现你所说的问题, 但对于你的这段程序用numpy有点大材小用了。 建议你用下面的方法。
list = np.zeros(count) 改为 list = [0 for i in range(count)]
然后第二张图的错误提示正是因为numpy试图把字符串自动转换为浮点数,但显然是不可能的。为了避免这个错误就必要用我上面的第二个解决方法才行了。
最后,你的代码有可优化的空间,太多遍历和判断条件了。可能会很长,但可能会对你有一些启发,如果没有耐心的话,可以看最后一条就是最终完成的代码。
slice函数处理逻辑过于复杂了。 你是想把如361变成[3,6,1]这样的情况吧。那为何不使用list(str(361))呢,虽然最后的结果里面的元素是字符串类型,但后面直接用int(i)的方式解决了。这样的话,count函数都可以省略了。
看到slice函数下面的for遍历语句,我明白了你的用意,就是为了计算各个位数相加的和,这样的话,就连slice函数都没必要了。直接下面代码就可以了:
foriinstr(n):
sum+=int(i)
3.再继续,发现又是slice和for循环,原来是要继续把sum分开。直接list(str(sum))即可。
4.到最后了,我看到了很多条件判断,总觉得条件判断这么写,显得有点罗嗦了点。可以把你这个条件判断写一个类似配置文件的对象,其实就是字典对象。 最终给你总结一下你的代码就是下面这样的:
#input直接用字符串类型就够用了。然后去掉所有import
inputStr=input()
sum=0
#这条赋值语句其实无所谓,但对于理解代码来说还是很重要的,反正也不影响性能,何乐而不为呢。
result=[]
#下面的是类似配置文件的字典对象
convertDic={'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}
#算出input的各个位相加的和
foriininputStr:
sum+=int(i)
#str也是可迭代的类型,所以通过map和lambda匿名函数把各个值变成相对应的拼音。
result=list(map(lambdax:convertDic[x],str(sum)))
print(result)
#去掉注释和print语句,这段程序只用了7行,而且理解起来是不是还挺简单的(除了最后一条)
#我相信你对于上面的语句不是很懂,里面涉及了两个看起来“高达上的东西”,但其实就是一种简写形式。
#map就是映射,简单说就是一个循环,就是把每一个元素经过一个函数处理后再返回来的过程。
#lambda是一个匿名函数,没有函数名,只能有一个表达式,且这个表达式就是返回值。它就是一个精简版的函数而已。当然,map里面也可以直接写已定义好的函数名。
#最后我用比较通俗的代码给你解释一下上面那句语句的大致的工作流程。
#定义一个函数,相当于上面的匿名函数.
defconvert(x):
returnconvertDic[x]
#然后遍历sum,并把每个元素替换成相应的拼音。现在的sum是一个int类型,int类型是不能迭代的或者遍历的,所以需要把int转换成str类型。
#这里讲一点map和这个循环遍历的区别,首先map会把已有的元素替换成经过函数处理的值。但这条循环是在一个空的list对象里添加数据,这是区别。当然,也可以写替换数据的循环,但代码量不是这2行了,会更多。如果要遍历的话,这种写法还是比较推荐的。
foriinstr(sum):
result.append(convert(i))
#result.append(convertDic[x])也可以这样写,但为了解释上面那条语句,所以这条注释掉当给你的启发。
#最后print就可以看到结果了,也就是说,我们把4条一句压缩成了一天语句了。如果还是不了解的话,可以翻翻文档什么的,里面会有一些例子可当参考。
print(result)