当我阅读numpy教程时,我给自己一些挑战来建立我的理解。我在通读教程点.com的numpy资源,当我在上一个示例中看到他们的最终产品修改的数组不是真正的数组时。你知道吗
页面底部,广播迭代示例: https://www.tutorialspoint.com/numpy/numpy_iterating_over_array.htm
所以我决定尝试创建与数组相同的最终产品将是一个很好的挑战。我成功了,但我不能使用np.nditer公司我也不能利用广播,尽管我确信一定有办法利用其中一个/两个。你知道吗
这是我的密码:
a = np.arange(0,60,5)
a = a.reshape(12,1)
b = np.arange(1,5)
arr = np.zeros((12,2))
counter = 0
for i in range(arr.shape[0]):
if counter < 4:
arr[i,:] = np.array([a[i],b[counter]])
counter += 1
else:
counter = 0
arr[i,:] = np.array([a[i],b[counter]])
print arr
我怎样才能更有效地做到这一点?你知道吗
我以前没有看过那种特别的
nditer
教程。https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.nditer.html
是我用过的那个。我一直告诉人们,
nditer
,使用这个Python接口,效率不高。这个页面作为在C代码中使用nditer
的垫脚石非常有用,如上一个cython
示例所示。你知道吗使用
np.nditer
(在Python代码中)的numpy函数并不多。np.ndindex
是为数不多的。值得一读它的代码。np.einsum
使用这个迭代器,但是在编译代码中。你知道吗稍后我将花时间阅读并评论这个例子。学会使用广播比使用
nditer
更重要。你知道吗等价的纯Python迭代:
np.broadcast
将用(4,)广播(3,4)数组:使用
np.array(list(np.broadcast(a,b)))
生成(12,2)数组。你知道吗或使用相同的打印:
您的迭代:
哦,如果您希望第二列是一个重复的
b
,那么看起来有点不对劲。你知道吗有许多方法可以将
a
和b
组合到这种数组中。你知道吗这将2d
a
转换为1d;用tile
复制b
,并用stack
连接它们(column_stack
也可以):相关问题 更多 >
编程相关推荐