我想要一个numpy数组,如下所示:
[
    ["Hi", "Anne"],
    ["How", "are", "you"],
    ["fine"]
]但是创建这个numpy数组的过程并不简单,它如下所示:
# code block 1开始时,我们有一个空的numpy数组。第一个循环:
在第一个循环中添加
# code block 2 行,或者在这个循环中,我们理解我们需要一个新的行。
第一个循环中的一个循环:
该行的
# code block 3 elements将被添加到这个内部循环中。。
假设:
- the number of columns of each row is different and- we don't know the number of rows that we want to add to numpy array.也许下面的代码示例将帮助我理解我的观点:
a = [["Hi", "Anne"], ["How", "are", "you"], ["fine"]]
# code block 1: code for creating empty numpy array
for row in a:
    # code block 2: code for creating empty row
    
    for element in row:
        # code block 3: code for appending element to that row or last row问题:
code block #1, #2, #3)创建一个numpy数组?如果是,怎么做?
发布于 2021-12-21 05:12:54
从嵌套列表开始:
In [99]: alist = [
    ...:     ["Hi", "Anne"],
    ...:     ["How", "are", "you"],
    ...:     ["fine"]
    ...: ]
In [100]: alist
Out[100]: [['Hi', 'Anne'], ['How', 'are', 'you'], ['fine']]利用它制作一个数组:
In [101]: arr = np.array(alist)
<ipython-input-101-3fd8e9bd05a9>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  arr = np.array(alist)
In [102]: arr
Out[102]: 
array([list(['Hi', 'Anne']), list(['How', 'are', 'you']), list(['fine'])],
      dtype=object)这一警告告诉我们,我们正在做一些不寻常的事情,或者至少是次优。我们可以用dtype=object来抑制警告,但是结果是一样的。
看看结果--它是一个3元素数组,其中每个元素都是一个列表。它不是多维数组。我们可以做一个数组
In [103]: arr1 = np.array([np.array(el) for el in arr], object)
In [104]: arr1
Out[104]: 
array([array(['Hi', 'Anne'], dtype='<U4'),
       array(['How', 'are', 'you'], dtype='<U3'),
       array(['fine'], dtype='<U4')], dtype=object)听起来像是要用数组复制这个列表构造函数:
在107: al = []
     ...: for row in alist:
     ...:     al1 = []
     ...:     for el in row:
     ...:         al1.append(el)
     ...:     al.append(al1)
     ...: 
In [108]: al
Out[108]: [['Hi', 'Anne'], ['How', 'are', 'you'], ['fine']]但也有几个问题。
没有简单的“空”数组;数组可以具有(0,或(0,3)或(3,0,3)等形状。
数组没有一个简单而快速的append。np.append不符合条件。任何“增长”数组的尝试都会导致生成一个带有完整副本的新数组。List append只是向设计为增长的对象添加了一个指针。
虽然numpy可以生成字符串dtype数组(如104),但它没有特殊的字符串处理代码。您仍然必须使用python字符串方法来操作这些字符串。
对象dtype数组上的数学是偶然的,比数字数组上的数学慢。本质上,它发生在列表理解的速度。
numpy是为多维阵列的快速数值计算而设计的。想想矩阵乘法,加法之类的东西。即使作为机器学习的垫脚石,数组也需要是数字的和“矩形的”。衣衫褴褛的列表不能用于ML。
发布于 2021-12-20 21:55:06
Numpy数组没有针对不一致的维度进行优化,因此也没有良好的实践。您只能通过使元素对象(而不是字符串)来做到这一点。但就像我说的,矮胖不是解决这个问题的方法。
a = numpy.array([["Hi", "Anne"], ["How", "are", "you"], ["fine"]], dtype=object)https://stackoverflow.com/questions/70428401
复制相似问题