创建随机字母数组:Python 3

时间:2018-03-02 20:27:50

标签: python python-3.x loops numpy

使用下面的函数创建一个随机整数数组会更方便。

df[c(25:30, 49:54), ]

   ID Variable Value Time
25  2        A     1    0
26  2        B     4    0
27  2        C     3    0
28  2        D    NA    0
29  2        E    NA    0
30  2        F    NA    0
49  3        A    NA    0
50  3        B     2    0
51  3        C     2    0
52  3        D     2    0
53  3        E     2    0
54  3        F     3    0

我尝试为字母(a-z)而不是整数构建类似的函数,但是我找不到numpy或任何其他可用库中的任何内置函数。

所以我用3 - for循环如下,

def generate_random_strings(x, i, j):

    return np.random.randint(0, 2, size=[x, i, j]).astype(np.float32)

print (generate_random_strings(3, 5, 4))

[[[0. 0. 0. 0.]
[0. 1. 1. 0.]
[0. 1. 1. 0.]
[0. 0. 0. 1.]
[0. 1. 0. 1.]]

[[0. 1. 0. 0.]
[1. 0. 1. 1.]
[0. 1. 1. 0.]
[1. 0. 1. 0.]
[0. 0. 0. 0.]]

[[0. 0. 1. 0.]
[1. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 1. 0. 0.]
[1. 1. 0. 0.]]]

所以,现在我的问题是,对于字符串/字母是否有# Generate random letter def randomword(len): return random.choice(string.ascii_lowercase) x= 3 i= 5 j= 4 buf = [] for _ in range(x): bu = [] for i in range(i): b = [] for j in range(j): b.append(randomword(1)) bu.append(b) buf.append(np.asarray(bu)) print(np.asarray(buf)) [[['u' 'w' 'w' 'x'] ['b' 's' 'p' 'a'] ['k' 'u' 'y' 'p'] ['p' 'z' 'b' 'u'] ['o' 'h' 'c' 'm']] [['t' 'y' 'b' 'r'] ['e' 's' 'e' 't'] ['p' 'n' 'd' 'w'] ['h' 'f' 'i' 'e'] ['o' 'b' 'q' 'r']] [['x' 'z' 'd' 'x'] ['r' 'b' 'f' 'b'] ['d' 'h' 'e' 'g'] ['p' 'g' 'u' 'x'] ['k' 'j' 'z' 'd']]] 的函数,如果没有,是否有任何pythonic方法来减少(for循环)代码长度。

4 个答案:

答案 0 :(得分:8)

您可以在所有ascii小写字母上使用numpy.choice

import string
import numpy as np

np.random.choice(list(string.ascii_lowercase),  size=(3, 5,4))

答案 1 :(得分:2)

如果你想坚持numpy,你可以使用<table width="100%" > <tr width="100%" class="bgcolor_02"> <th ROWSPAN="2" >SUBJECTS </th> <th COLSPAN="2" >EXAMS </th> <th COLSPAN="2" >PROJECTS </th> </tr> <tr class="bgcolor_02"> <th id="1E"> 1.EXAM</th> <th id="2E"> 2.EXAM</th> <th id="1P"> 1.PROJECT</th> <th id="2P"> 2.PROJECT</th> </tr> <?php $myexamresults = $db-> getrows (" SELECT * FROM `es_exam_result` WHERE `es_studentid` = '".$_SESSION['eschools']['user_id']."' ORDER BY `es_examorder` ASC "); $pre_subjects=subjectnameByClass($es_subjectshortname); foreach ($pre_subjects as $ndsdersliste ) { $subjeid=$ndsdersliste['es_subjectid']; ?> <tr > <td ><?php echo $ndsdersliste['es_subjectname']; ?></td> <?php foreach ($myexamresults as $ndsmyexam) { $puan=""; if( $ndsdersliste['es_subjectname'] == $ndsmyexam['es_subjectname'] ) { $examname = $ndsmyexam['es_examname']; $puan = $ndsmyexam['es_puan']; if ($examname =="1.Exam"){ ?> <td headers="1E" ><?php {echo $puan ;} ?> </td> <?php } if ($examname =="2.Exam"){ ?> <td headers="2E" ><?php {echo $puan ;} ?> </td> <?php } if ($examname =="1.Project"){ ?> <td headers="1P" ><?php {echo $puan ;} ?> </td> <?php } if ($examname =="2.Project"){ ?> <td headers="2P" ><?php {echo $puan ;} ?> </td> <?php } } } ?> </tr> <?php } ?> </table> 数据类型,它只是长度为1个字节的字符串。因此,'S1'对应于与8位无符号整数相同的数字。所以可以使用ord生成随机无符号8位整数,将它们转换为字节串

numpy.random.randint

注意,它的速度是原来的两倍,需要四分之一的内存:

>>> ord('a'), ord('z')
(97, 122)
>>> np.random.randint(97, 123, (3, 5, 4), dtype=np.uint8).view('S1')
array([[[b'p', b'q', b'b', b'x'],
        [b'm', b'x', b'e', b'f'],
        [b'u', b'h', b'e', b'd'],
        [b'o', b'n', b'w', b'v'],
        [b'z', b'q', b'g', b'e']],

       [[b'f', b'o', b'c', b'j'],
        [b'z', b'x', b'l', b'x'],
        [b'u', b'f', b'w', b'r'],
        [b'q', b'z', b'm', b'o'],
        [b't', b'e', b'm', b'e']],

       [[b'f', b'i', b'x', b'k'],
        [b'z', b'w', b'm', b'g'],
        [b't', b'f', b'u', b'q'],
        [b'e', b'w', b'w', b'r'],
        [b'e', b'q', b'a', b'g']]],
      dtype='|S1')

答案 2 :(得分:1)

根据需要创建任意数量的随机字母,并将它们重塑为一个numpy数组:

import numpy as np
import string
import random

def randomLetters(amount:int):
    return random.choices(string.ascii_lowercase, k=amount)    

i=5
j=4
x=3

d =  np.array(randomLetters(x*i*j)).reshape((x,i,j))

答案 3 :(得分:0)

print [[[chr(randint(ord('a'), ord('z'))) for col in range(4)]for row in range(5)] for x in range(3)]

输出:

[
[
    ['e', 'y', 'y', 'a'],
    ['p', 'o', 'k', 'z'],
    ['j', 'p', 'n', 'p'],
    ['d', 'y', 'k', 's'],
    ['k', 'c', 'k', 'o']
],
[
    ['v', 'w', 't', 'a'],
    ['f', 'a', 't', 'm'],
    ['h', 'w', 'i', 'x'],
    ['a', 'w', 's', 'z'],
    ['x', 'f', 'b', 'b']
],
[
    ['x', 'f', 'm', 'y'],
    ['b', 'u', 'z', 's'],
    ['j', 'p', 'x', 'l'],
    ['a', 'p', 'b', 'i'],
    ['z', 's', 'v', 'k']
]
]