遇到的python相关操作

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容