【发布时间】:2017-03-30 02:53:21
【问题描述】:
我正在尝试将列表转换为具有指定列数的 numpy 数组。我可以让代码在函数之外工作,如下所示:
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.]]
尝试将例程放入函数中时,我不明白我的错误。我的尝试如下:
# resize | inside function
def shapeshift(mylist, num_col):
num_col = int(num_col)
return mylist.resize(mylist.shape[0]//num_col,num_col)
ls = shapeshift(ls,2)
print(ls)
>> None
我想以这种方式定义原始函数,因为我想要另一个函数,由相同的输入和第三个输入组成,在提取值时循环遍历行,为每个遍历行调用这个原始函数。
【问题讨论】:
-
我怀疑
resize在原地工作并返回None。尝试稍后返回mylist本身。 -
在一行之后返回
mylist对函数输出没有影响。如果resize就地工作,是否有更有效、更方便的方法可以在没有 for 循环的情况下实现这一目标?最后,我想定义另一个具有相同输入和第三个输入的函数,这样我就可以调用上面的函数并遍历每一行。 -
显然函数形式(即
np.resize(a, new_shp),而不是方法形式a.resize(new_shp))不能就地工作并创建一个新数组。所以你可以尝试使用它。 -
我试过这个方法,但它只返回第一个
new_shp元素。如果new_shp=2,则返回[1,2]。对于这个示例,我想我可以将函数参数设置为从2到100的偶数列表,但我仍然希望有一种更有效的方法来做到这一点。 -
你可以为
new_shp使用一个元组;喜欢np.reshape(a, (m, n))。在你的例子中m=50, n=2.
标签: arrays python-3.x numpy reshape array-broadcasting