ndarray:一种多维数组对象
ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的。每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)。
In []: import numpy as np In []: data = np.array([[,,,],[,,,]]) In []: data
Out[]:
array([[, , , ],
[, , , ]])
In []: data.shape
Out[]: (, ) In []: data.dtype
Out[]: dtype('int32')
Part 1 :创建ndarray的方法
array()
arange()
linspace()
zeros()
ones()
empty()
eye()
一 array()
类似Python中的列表,但有两点不同。
array长度是预先定好的,没有append方法。
执行乘法操作时。示例。
import numpy as np a=np.array([,,,,])
print('numpy',a*) l=[,,,,]
print('python',l*)
输出:
numpy [ ]
python [, , , , , , , , , , , , , , , , , , , , , , , , ]
应用场景 1)
假如有这样一个场景,将[1,2,3,4,5,6,7] 美元货币转为人民币,这个时候,numy.array便能较好的实现效果。
python能不能实现呢?也是可以的。两种方法,一种方法是循环遍历,乘以汇率。另外一种是使用内置函数map函数。有逼格。
注意,python3中,map返回的是迭代器。
import numpy as np a=np.array([,,,,])
print('numpy',a*) l=[,,,,]
print('python',l*)
print('map函数',list(map(lambda x:x*,l)))
应用场景 2)
有1000个商品,每个商品数量随机,商品价格随机,求总金额。 array实现起来也比较简单。
最后调用 .sum()方法
import numpy as np
import random
p=np.array([random.uniform(,) for _ in range()])
n=np.array([random.randint(,) for _ in range()])
print((p*n).sum()) #.sum()
同样,用python能不能实现呢?也是可以的,有两种方法。一种方法是for循环,一种方法是使用内置函数zip函数。很有逼格,老铁。
方法1:
s=
p=[random.uniform(,) for _ in range()]
n=[random.randint(,) for _ in range()]
for i in range():
s+=p[i]*n[i]
print(s)
方法2 :zip方法。注意,zip函数返回来的是一个迭代器。zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
p=[random.uniform(,) for _ in range()]
n=[random.randint(,) for _ in range()]
s=
for price,num in zip(p,n):
s+=price*num
print(s)
二 linspace(x,y,n)
将x-y,之间 n 均等分
类似arange(),第三个参数为数组长度。
x=np.linspace(-,,)
x
输出:
array([-. , -99.979998, -99.959996, ..., 99.959996,
99.979998, . ])
利用linspace画图
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-,,)
y=x**
plt.plot(x,y)
plt.show()
输出:
三 arange()
基本和range方法一样用
不同点,步长支持浮点数。
arr=np.arange(,,0.5)
arr
输出:
array([ . , 1.5, . , 2.5, . , 3.5, . , 4.5, . , 5.5, . ,
6.5, . , 7.5, . , 8.5, . , 9.5, . , 10.5, . , 11.5,
. , 12.5, . , 13.5, . , 14.5, . , 15.5, . , 16.5, . ,
17.5, . , 18.5, . , 19.5])
四 zeros()
根据指定形状和dtype,创建全0数组
arr=np.zeros()
arr
输出: 默认是浮点型
array([., ., ., ., ., ., ., ., ., .])
可以指定类型,参数是dtype
arr=np.zeros(,dtype='int')
arr
输出:
array([, , , , , , , , , ])
可以创建二维数组
arr=np.zeros((,),dtype='int')
arr
输出:
array([[, , , ],
[, , , ],
[, , , ]])
五 ones()
和zeros 类似,根据指定形状和dtype,创建全1 数组,可以创建二维数组。
六 empty()
根据指定形状和dtype,创建空数组(随机数填充),可以创建二维数组。
arr=np.empty()
arr
输出:
array([7.33501733e-312, 0.00000000e+000, 3.60739284e-313, 4.94065646e-324,
7.33501739e-312, 7.33501604e-312, 7.33371324e-312, 5.30498948e-313,
0.00000000e+000, 0.00000000e+000, 7.33501604e-312, 0.00000000e+000,
5.72938864e-313, 4.94065646e-324, 7.33501739e-312, 7.33501604e-312,
7.33371324e-312, 7.42698527e-313, 0.00000000e+000, 0.00000000e+000,
1.50690022e-321, 0.00000000e+000, 7.85138443e-313, 4.94065646e-324,
7.33501740e-312, 5.92878775e-323, 7.33371322e-312, 9.54898106e-313,
0.00000000e+000, 0.00000000e+000, 1.50690022e-321, 0.00000000e+000,
9.97338022e-313, 4.94065646e-324, 7.33501740e-312, 5.92878775e-323,
7.33371324e-312, 1.16709769e-312, 0.00000000e+000, 0.00000000e+000,
7.33499531e-312, 0.00000000e+000, 1.20953760e-312, 4.94065646e-324,
7.33501741e-312, 7.33499531e-312, 7.33371324e-312, 1.37929726e-312,
0.00000000e+000, 0.00000000e+000, 7.33499531e-312, 0.00000000e+000,
1.42173718e-312, 4.94065646e-324, 7.33501741e-312, 7.33499531e-312,
7.33371324e-312, 1.59149684e-312, 0.00000000e+000, 0.00000000e+000,
3.18994064e+231, 0.00000000e+000, 1.63393676e-312, 5.87880625e+250,
7.33501741e-312, 1.77111852e+159, 7.33371323e-312, 1.80369642e-312,
8.97461399e+245, 0.00000000e+000, 5.77253125e+250, 0.00000000e+000,
1.84613634e-312, 1.62482249e+265, 7.33501741e-312, 1.42973900e+188,
7.33371324e-312, 2.01589600e-312, 1.72351640e+212, 0.00000000e+000,
1.72762649e+212, 0.00000000e+000, 2.05833592e-312, 3.33203517e+178,
7.33501742e-312, 7.09013607e+274, 7.33371324e-312, 2.22809558e-312,
4.13443852e-087, 0.00000000e+000, 1.53172818e-154, 0.00000000e+000,
2.27053550e-312, 4.85705098e+226, 7.33501742e-312, 5.84384734e+250,
1.52845066e-154, 5.88999540e+250, 7.42539480e+221, 7.70887102e-315])
七 eye()
根据指定边长和dtype创建单位矩阵。
arr=np.eye()
arr
输出:
array([[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .],
[., ., ., ., ., ., ., ., ., .]])
Part 2 :ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。
In []: arr1 = np.array([,,],dtype=np.float64) In []: arr2 = np.array([,,],dtype=np.int32) In []: arr1.dtype
Out[]: dtype('float64') In []: arr2.dtype
Out[]: dtype('int32')
dtype是numpy如此强大和灵活的原因之一。多数情况下,他们直接映射到相应的机器表示,这使得‘读写磁盘上的二进制数据流’以及‘集成低级语言代码(如C,Fortran)’等工作边的更加简单。
你可以通过ndarray的astype方法显示的转换换其dtype
In []: arr = np.array([,,,]) In []: arr
Out[]: array([, , , ]) In []: arr.dtype
Out[]: dtype('int32') In []: arr1 = arr.astype(np.float64) In []: arr1.dtype
Out[]: dtype('float64')
注意:调用astype无论如何都会创造出一个新的 数组(原始数组的一份拷贝),即使新dtype跟苑dtype相同也是如此。
Part 3 :基本的索引和切片
In []: arr = np.arange() In []: arr
Out[]: array([, , , , , , , , , ]) In []: arr[]
Out[]: In []: arr[:]
Out[]: array([, , ]) In []: s = arr[:]
In []: s
Out[]: array([, , ]) In []: s[] = In []: s
Out[]: array([ , , ]) In []: arr
Out[]:
array([ , , , , , , , , ,
])
跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反应到原数组上。因为numpy的设计目的是处理大数据。
如果你想要得到一份副本而非视图。就需要显式的进行复制操作。
In []: arr = np.arange() In []: arr
Out[]: array([, , , , , , , , , ]) In []: s = arr[:].copy() In []: s
Out[]: array([, , ]) In []: s[] = In []: s
Out[]: array([ , , ]) In []: arr
Out[]: array([, , , , , , , , , ])
补充
1 一维数组 转换 二维数组.。reshape方法
arr=np.array([,,,,,,,,,]).reshape((,))
arr
输出:
array([[ , , , , ],
[ , , , , ]])
2 int类型数组 与 浮点型 数组之间的转换 。astype方法
arr=np.arange(,dtype='int')
arr
输出: 这是整型
array([, , , , , , , , , ])
直接调用astype()
arr.astype('float')
输出:
array([., ., ., ., ., ., ., ., ., .])
3 索引
1 一维数组 arr[3]
2 二维数组
arr[3][3]
arr[3,3] 推荐这个方法。与下面切片联系紧密。
4 切片
array([[ , , , , ],
[ , , , , ],
[, , , , ]])
想取出下面数组,怎么办?
array([[ , ],
[, ]])
用推荐的索引稍加变动。
arr[:,:]
5 和列表不同的,数组的切片不是自动复制,对切片数组的修改会影响到原切片。
怎么办呢,加copy()方法
ndarray:一种多维数组对象的更多相关文章
- Numpy的ndarry:一种多维数组对象
Numpy的ndarry:一种多维数组对象 Numpy最重要的一个特点就是其N维数组对象(即ndarry),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟 ...
- jquery解析php通过ajax传过来的json二维数组对象
ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>arra ...
- 初识numpy的多维数组对象ndarray
PS:内容来源于<利用Python进行数据分析> 一.创建ndarray 1.array :将一个序列(嵌套序列)转换为一个数组(多维数组) In[2]: import numpy as ...
- Numpy 多维数组简介
 NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...
- numpy 数组对象
numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange ...
- Numpy学习一:ndarray数组对象
NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray.jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift ...
- NumPy之:ndarray多维数组操作
NumPy之:ndarray多维数组操作 目录 简介 创建ndarray ndarray的属性 ndarray中元素的类型转换 ndarray的数学运算 index和切片 基本使用 index wit ...
- 一、Numpy库与多维数组
# Author:Zhang Yuan import numpy as np '''重点摘录: 轴的索引axis=i可以理解成是根据[]层数来判断的,0表示[],1表示[[]]... Numpy广播的 ...
- flash 定义二维数组
一种二维数组的定义方法 //假设二维数组为 [5][7]var xn:Number = 5;var yn:Number = 7; //定义一数值变量var temp:Number = 0; ...
随机推荐
- HDU 4291 A Short problem 短问题 (递推,找规律)
题意: 给出递推式 g(n) = 3g(n - 1) + g(n - 2),且g(1) = 1,g(0) = 0.求g( g( g(n))) mod 109 + 7. 思路: 要求的g( g( g(n ...
- css3 省略号
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 也无需给元素设置固定宽度!
- SAP不同的产品是如何支持用户创建自定义字段的
我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看. SAP CRM 我们使用所谓的Application Enhancement Tool( ...
- UVA - 1658 Admiral (最小费用最大流)
最短路对应费用,路径数量对应流量.为限制点经过次数,拆点为边.跑一次流量为2的最小费用最大流. 最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路. #include ...
- Heacher互助平台 α版本冲刺
课程属性 作业课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 作业链接 https://edu.cnblogs.co ...
- shell 复合条件测试 if [ $1 == "1" -o $1 == "0" ] ------==和-eq怎么用
想要实现: ”,或者$1等于“” ];then 输出一些东西 ”,或者$1等于“” ];then 输出一些东西 fi 这里比较难操作的是等于和或者: 等于: -eq 或者 == 或者: -o 见: ...
- 【转】数据库SQL的一些总结
http://www.cnblogs.com/yank/category/104903.html
- 阿里短信接口使用(JAVA版)
近期项目需要使用短信接口,对比下选择了阿里的短信接口 以下为开发笔记: maven pom.xml中引入: <dependency> <groupId>com.aliyun&l ...
- shell脚本,配置文件加载顺序,以及什么时候加载。
在linux系统中,有/etc/profile,/etc/bashrc ,~/.bash_profile,~/bashrc这四个配置文件,这些文件,会自动的在某些时候加载,也就是点一下,一般都是些别名 ...
- shell脚本,计算输入给定的数,判断最大值,最小值,总和?
[root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...