我正在尝试将列表转换为具有指定列数的numpy数组。我可以让代码在函数外部工作,如下所示:
/location1[Variable='variable1'][item1[contains(.,'AB')] or item1[contains(.,'ab')]
尝试在函数中抛出例程时,我不明白我的错误。我的尝试如下:
import numpy as np
ls = np.linspace(1,100,100) # Data Sample
ls = np.array(ls) # list --> array
# resize | outside function
ls.resize(ls.shape[0]//2,2)
print(ls)
>> [[ 1. 2.]
[ 3. 4.]
.
.
.
[ 97. 98.]
[ 99. 100.]]
我想以这种方式定义原始函数,因为我想要另一个函数,包括相同的输入和第三个输入,在提取值时循环遍历行,为行上的每个循环调用这个原始函数。
答案 0 :(得分:2)
In [402]: ls = np.linspace(1,100,10)
In [403]: ls
Out[403]: array([ 1., 12., 23., 34., 45., 56., 67., 78., 89., 100.])
In [404]: ls.shape
Out[404]: (10,)
无需再次在array
中换行;它已经是一个:
In [405]: np.array(ls)
Out[405]: array([ 1., 12., 23., 34., 45., 56., 67., 78., 89., 100.])
resize
就地运作。它什么都不返回(或无)
In [406]: ls.resize(ls.shape[0]//2,2)
In [407]: ls
Out[407]:
array([[ 1., 12.],
[ 23., 34.],
[ 45., 56.],
[ 67., 78.],
[ 89., 100.]])
In [408]: ls.shape
Out[408]: (5, 2)
使用此resize
,您不会更改元素数量,因此reshape
也可以正常工作。
In [409]: ls = np.linspace(1,100,10)
In [410]: ls.reshape(-1,2)
Out[410]:
array([[ 1., 12.],
[ 23., 34.],
[ 45., 56.],
[ 67., 78.],
[ 89., 100.]])
方法或函数形式的 reshape
返回一个值,保持ls
不变。 -1
是一个方便的短手,避免了//
分裂。
这是reshape的原位版本:
In [415]: ls.shape=(-1,2)
reshape
需要相同的元素总数。 resize
允许您根据需要更改元素数量,截断或重复值。我们更频繁地使用reshape
resize
。 repeat
和tile
也比resize
更常见。
答案 1 :(得分:2)
.resize
方法就地工作并返回None
。如果有其他名称引用同一个数组,它也会拒绝工作。您可以使用函数表单,它创建一个新数组,而不是反复无常:
def shapeshift(mylist, num_col):
num_col = int(num_col)
return np.resize(mylist, (mylist.size//num_col,num_col))