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; ...
随机推荐
- SQLite连接
SQLite -连接 SQLite的联接子句用于从数据库中的两个或多个表合并的记录.JOIN是用于通过使用共同的每个值从两个表结合域的装置. SQL定义了三个主要类型的连接: CROSS JOIN I ...
- Android(java)学习笔记146:网页源码查看器(Handler消息机制)
1.项目框架图: 2.首先是布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com ...
- jquery操作滚动条滚动到指定元素位置 scrollTop
$('.brand_t a').bind('click',function(){ if($(this).attr('title1')){ var toChar = $(this).attr('titl ...
- Shell脚本调用SQL文格式
Shell脚本调用SQL文格式 1. 定义需要执行的SQL文,以及需要输出文件 OUTFILE=\${DATADIR}/\${FILENAME} SQLFILE=\${DATADIR}/check_t ...
- iterator方法和for方法 遍历数据库user表结果集ResultSet
首先,把连接数据库的语句做成工具类,因为会一直用到这几句 代码如下: package com.swift.jdbc; import java.sql.Connection; import java.s ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- 企业版https
http://www.cocoachina.com/bbs/read.php?tid=194213
- 674. Longest Continuous Increasing Subsequence@python
Given an unsorted array of integers, find the length of longest continuous increasing subsequence (s ...
- Hdu 3177 (贪心)
题目大意: 山洞的体积为\(v\) 第\(i\)个物品放在山洞里会占据\(a_i\)的空间,在搬运过程中至少需要\(b_i\)的空间 问能不能把所有物品都放下 贪心题.比较难看出贪心,但是从无顺序要求 ...
- MySQL中数组的存储
1. MySQL中以字符串的形式存储数组 MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储 1.1. 求数组中元素的个数 方法:按指定符号分割字符串,返回分割后的元素个数.方法很简 ...