nparray.repeat(n)
复制当前元素n次,扩充numpy数组
在同一维度上,增加 n-1 个原有元素
[1,2,3].repeat(3) -> [1,1,1,2,2,2,3,3,3]
string.join()
以sep作为分隔符,将seq所有的元素合并成一个新的字符串
语法: 'sep'.join(seq)
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
返回值:返回一个以分隔符sep连接各个元素后生成的字符串
>>> seq1 = ['hello','good','boy','doiido']
>>> print ' '.join(seq1)
hello good boy doiido
>>> print ':'.join(seq1)
hello:good:boy:doiido
numpy.full()
我是想生成一个全是空字符None的数组,平常的arrang()和zeros()实现不了对元素值的设置。
返回给定维度和类型的新数组,填充 fill_value。
numpy.full(shape, fill_value, dtype=None, order='C')
参数 | 描述 |
---|---|
shape | 返回数组的维度 |
fill_value | 填充值 |
dtype | 返回数组的数据类型,默认值 None 指:np.array(fill_value).dtype |
order | 在计算机内存中的存储元素的顺序,只支持 'C'(按行)、'F'(按列),默认 'C' |
import numpy as np
a = np.full((2, 3), 9)
print(a)
--------
[[9 9 9]
[9 9 9]]
numpy.linspace()
创建一个特定长度的一维等差数列数组
与 arange 函数不同,arange 是固定步长,而 linspace 则是固定元素数量。
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
注意区间是前闭后闭的,所以生成长度为n的是linspace(0,n-1,n)
参数 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果 endpoint 为 True,则该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为 50 |
endpoint | 该值为 Ture 时,数列中中包含 stop 值,反之不包含,默认是 True。 |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示。 |
dtype | ndarray 的数据类型 |
import numpy as np
a = np.linspace(0, 5, 3, endpoint=False)
b = np.linspace(0, 5, 4, endpoint=True)
print(a)
print(b)
----------
[0. 1.66666667 3.33333333]
[0. 1.66666667 3.33333333 5. ]
建n个数组
利用列表/字典+循环
list = [ np.array, np.array, ... ]
dict = { i : np.array }
生成N个区分度较高的RGB颜色值
先通过随机的方式获得N个区分度比较高的HLS颜色值
import colorsys
import random
def get_n_hls_colors(num):
hls_colors = []
i = 0
step = 360.0 / num
while i < 360:
h = i
s = 90 + random.random() * 10
l = 50 + random.random() * 10
_hlsc = [h / 360.0, l / 100.0, s / 100.0]
hls_colors.append(_hlsc)
i += step
return hls_colors
def ncolors(num):
rgb_colors = []
if num < 1:
return rgb_colors
hls_colors = get_n_hls_colors(num)
for hlsc in hls_colors:
_r, _g, _b = colorsys.hls_to_rgb(hlsc[0], hlsc[1], hlsc[2])
r, g, b = [int(x * 255.0) for x in (_r, _g, _b)]
rgb_colors.append([r, g, b])
rgb_colors_hex.append(rgb_to_hex([r, g, b]))
#return RGB list in decimal, RGB list in heximal
# ['121','231','231'] ['#F31212', '#96F833', '#39F7F7']
return rgb_colors,rgb_colors_hex
RGB转换成十六进制
def rgb_to_hex(rgb):
if type(rgb)!= str: # handle list, tuple, array
for i in range(0,len(rgb)):
rgb[i] = str(rgb[i])
else: # handle string
rgb = rgb.split(',')
# rgb = ['121','231','231']
strs = '#'
for i in rgb:
num = int(i)
strs += str(hex(num))[-2:].replace('x','0').upper()
return strs
ord()
Python ASCII码与字符相互转换
# 用户输入字符
c = input("请输入一个字符: ")
# 用户输入ASCII码,并将输入的数字转为整型
a = int(input("请输入一个ASCII码: "))
print( c + " 的ASCII 码为", ord(c))
print( a , " 对应的字符为", chr(a))
--------
请输入一个字符: a
请输入一个ASCII码: 101
a 的ASCII 码为 97
101 对应的字符为 e
查询numpy数组中满足条件的元素位置,得到其索引
argwhere(array):找到非空数组array在满足某些条件下的索引,返回索引数组。
arr = np.random.randint(0,10, (3,4))
index = np.argwhere(arr < 5)
-----------
arr =
9 3 7 0
3 4 2 4
3 6 4 4
index =
0 1
0 3
1 0
1 1
1 2
1 3
2 0
2 2
2 3
np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
>>> a = np.arange(27).reshape(3,3,3)
>>> a
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
>>> np.where(a > 5)
(array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]),
array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]))
# 符合条件的元素为
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]]
所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。
将字符串作为代码执行
给定一个字符串代码,然后使用 exec() 来执行字符串代码。
LOC = """
def factorial(num):
fact=1
for i in range(1,num+1):
fact = fact*i
return fact
print(factorial(5))
"""
exec(LOC)
--------
120
numpy.ndarray 在求mean,max,min的时候如何忽略跳过nan值
我们在对一个python numpy数组求均值或最大值的时候,如果这个数组里包含nan,那么程序就会报错或者求出来的值是nan,如下所示
import numpy as np
In [1]: import numpy as np
In [2]: test = np.array([3,5,4,7,np.nan])
In [3]: m = test.mean()
In [4]: m
Out[4]: nan
In [5]: np.mean(test)
Out[5]: nan
1
2
3
4
5
6
7
8
9
10
11
12
13
那么我们如何来忽略这里面的nan,缺省值呢,numpy还有其他函数可以实现,那就是np.nanmean, np.nanmax 诸如此类的函数,可以看出来就是前面加上一个nan
In [6]: np.nanmean(test)
Out[6]: 4.75
In [7]: np.nanmax(test)
Out[7]: 7.0