Python科学计算库Numpy之 迭代 nditer
NumPy - 数组上的迭代
NumPy 包包含一个迭代器对象numpy.nditer。 它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。 数组的每个元素可使用 Python 的标准Iterator接口来访问。
广播迭代
如果两个数组是可广播的,nditer组合对象能够同时迭代它们。 假设数组a具有维度 3X4,并且存在维度为 1X4 的另一个数组b,则使用以下类型的迭代器(数组b被广播到a的大小)。
代码举例
import numpy as np
a1 = np.arange(0, 60, 5).reshape(3, 4)
print(a1)
for x in np.nditer(a1):
print(x)
print(“-------------------------”)
# 迭代的顺序匹配数组的内容布局,而不考虑特定的排序
for x in np.nditer(a1.T):
print(x)
print(“-------------------------”)
# 以 C 风格顺序排序:
for x in np.nditer(a1.T.copy(order=‘C’)): ...
Python科学计算库Numpy之 数组操作
NumPy - 数组操作
操作ndarray 的方法
numpy.reshape:这个函数在不改变数据的条件下修改形状
numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器
numpy.ndarray.flatten:该函数返回折叠为一维的数组副本
numpy.ravel:这个函数返回展开的一维数组,并且按需生成副本。返回的数组和输入数组拥有相同数据类型
numpy.transpose:这个函数翻转给定数组的维度。如果可能的话它会返回一个视图
numpy.ndarray.T:该函数属于ndarray类,行为类似于numpy.transpose
numpy.rollaxis:该函数向后滚动特定的轴,直到一个特定位置
numpy.swapaxes:该函数交换数组的两个轴。对于 1.10 之前的 NumPy 版本,会返回交换后数组的试图
numpy.broadcast_to:此函数将数组广播到新形状。 它在原始数组上返回只读视图。 它通常不连续。 如果新形状不符合 广播规则,该函数可能会抛出ValueError
numpy.expand_ ...
Python科学计算库Numpy之 broadcasting
NumPy - 广播
术语broadcasting是指 NumPy 在算术运算期间处理不同形状的数组的能力。 对数组的算术运算通常在相应的元素上进行。 如果两个阵列具有完全相同的形状,则这些操作被无缝执行。 如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。 如果满足以下规则,可以进行广播:
ndim较小的数组会在前面追加一个长度为 1 的维度。
输出数组的每个维度的大小是输入数组该维度大小的最大值。
如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。
如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。
如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的。
数组拥有相同形状。
数组拥有相同的维数,每个维度拥有相同长度,或者长度为 1。
数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立。
[caption id=“” align=“ali ...
Python科学计算库Numpy之 切片与索引
NumPy - 切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,就像 Python 的内置容器对象一样。 如前所述,ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引。 基本切片是 Python 中基本切片概念到 n 维的扩展。 通过将start,stop和step参数提供给内置的slice函数来构造一个 Python slice对象。 此slice对象被传递给数组来提取数组的一部分。
NumPy - 高级索引
如果一个ndarray是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray。 高级索引始终返回数据的副本。 与此相反,切片只提供了一个视图。 有两种类型的高级索引:整数和布尔值。
整数索引
这种机制有助于基于 N 维索引来获取数组中任意元素。 每个整数数组表示该维度的下标值。 当索引的元素个数就是目标ndarray的维度时,会变得相当直接。 以下示例获取了ndarray对象中每一行指定列的一个元素。 因此,行索引包含所有行号,列索引指定要 ...
Python科学计算库Numpy之 属性
numpy数组属性
ndim : 这一数组属性返回数组的维数
shape : 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小
size : 数组的元素个数
dtype : 数组的数据类型
itemsize : 这一数组属性返回数组中每个元素的字节单位长度
nbytes : 数组占用的总内存大小,以字节为单位
flags : ndarray对象拥有以下属性。这个函数返回了它们的当前值。
序号
属性及描述
C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内
F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内
OWNDATA (O) 数组的内存从其它对象处借用
WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读
ALIGNED (A) 数据和任何元素会为硬件适当对齐
UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更新
代码使用如下:
import numpy as np
a1 = np.ar ...
Python科学计算库Numpy之 dtype
NumPy - 数据类型
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
序号
数据类型及描述
bool_ 存储为一个字节的布尔值(真或假)
int_ 默认整数,相当于 C 的long,通常为int32或int64
intc 相当于 C 的int,通常为int32或int64
intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64
int8 字节(-128 ~ 127)
int16 16 位整数(-32768 ~ 32767)
int32 32 位整数(-2147483648 ~ 2147483647)
int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)
uint8 8 位无符号整数(0 ~ 255)
uint16 16 位无符号整数(0 ~ 65535)
uint32 32 位无符号整数(0 ~ 4294967295)
uint64 64 位无符号整数(0 ~ 18 ...
Python科学计算库Numpy之 ndarray使用
NumPy - 简介
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。 Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。
NumPy 操作
使用NumPy,开发人员可以执行以下操作:
数组的算数和逻辑运算。
傅立叶变换和用于图形操作的例程。
与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。
NumPy – MatLab 的替代之一
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。 这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。 NumPy 是开源的,这 ...
Python 学习笔记 threading 使用
threading方法介绍
Python3 线程中常用的两个模块为:
_thread
threading(推荐使用)
thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。
threading 模块介绍
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。 threading模块提供的类: Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。 threading 模块提供的常用方法: threading.currentThread(): 返回当前的线程变量。 threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 th ...
VMware 虚拟机中添加新硬盘的方法
以前测试hadoop 集群的虚拟机突然发现磁盘空间不足了,决定添加块磁盘。
第一步、选择“VM”----“设置”并打开,将光标定位在 硬盘 这一选项,然后点击下方的添加按钮。
第二步、虚拟机中Linux对于虚拟的磁盘的挂载
使用“fdisk -l”的命令查看当前系统的分区(如果刚才设置VMware–setting的时候运行了系统,则会出现下图情况:没有识别到新的磁盘即sdb),解决办法,重启虚拟机:shutdown -r now
如果执行第一步的时候是关闭虚拟机中的系统的,则使用“fdisk -l 命令的时候则会出现新的磁盘sdb(不过提示未分区)
对新建的磁盘进行分区及格式化的工作:输入 fdisk /dev/sdb终端会提示:Command (m for help):
然后根据提示输入:n会出现下面的提示,依次输入p 和 1 即可接着便会提示卷的起始地址和结束地址,都保持默认按回车的即可(意思是只分一个区)
输入“w”保存并推出
重启
格式化 mkfs -t ext4 /dev/sdb1
下面便是对于分好区的/dev/sdb1 这一个分区进行挂载及访问
** ...
scala 高阶函数(一)
package com.cmcc.family.utils
import java.util.concurrent.TimeUnit
import com.google.common.base.Stopwatch
import org.apache.hadoop.hbase.client.Delete
import org.apache.hadoop.hbase.util.Bytes
import scala.collection.mutable
/**
* Created by Administrator on 2016/12/9 0009.
*/
object MainTest {
def sum(f: Int => Int)(a: Int, b: Int): Int = {
if (a > b) 0 else f(a) + sum(f)(a + 1, b)
}
def df(a: Int, b: Int)(c: Int): Int = a * b + c
def main(args: Array[String]) {
val df1: (Int) => Int ...