我想构建一个数组,其中包含基于数组当前值不断增加大小的数组。
例如
current_array [100,33]
和
limit = (n//10)
n=current_array(因此 limit_array=[10,3]
我希望我的输出数组是: [[1,...,10],[1,2,3]]
我想避免 for 循环;所以我想使用这样的范围:
output_array=np.arange(current_array, limit_array, 2,dtype=I)
我知道这是不可能做到的,因为 arange 的前两个参数只是 float ,但是你会怎么做呢?
附属问题:
1) 我不确定 numpy 是否可以处理不同大小的数组。如果不是,我可以使用数组的数组( https://docs.python.org/3/library/array.html )来完成此操作。但我必须对这个数组进行数组乘法。
那么这会比同时处理 array.arrays 慢吗?
或者我肯定应该找到另一个解决方案?
2)正如我所说,我有第三个 np.array [1,2,3] 我必须将前一个与它相乘。
我会得到类似的东西
[[[1,...,10]*1,[1,2,3]],[[1,...,10]*2,[2,4,6]],[[1,. ..,10]*3,[3,6,9]]] ?
编辑: 我也想出了
result_array=np.array()
result_array=np.append( np.arange(current_array, currentlimit, 1) for currentlimit in limit_array)
但不确定它是否有效
最佳答案
我认为您无法避免 for
循环,但您可以使用列表理解和 np.arange()
,这应该比正常情况快一点for
循环。示例-
np.array([np.arange(1, x+1) for x in limit_array])
演示 -
In [34]: import numpy as np
In [35]: ca = np.array([100,33])
In [39]: na = ca // 10
In [40]: na
Out[40]: array([10, 3], dtype=int32)
In [47]: result_array = np.array([np.arange(1, x+1) for x in na])
In [48]: result_array
Out[48]: array([array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), array([1, 2, 3])], dtype=object)
<小时/>
您也可以将列表理解用于您的第二个用例 -
In [55]: new_arr = np.array([1,2,3])
In [56]: new_result_array = np.array([result_array * x for x in new_arr])
In [57]:
In [57]: new_result_array
Out[57]:
array([[array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), array([1, 2, 3])],
[array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]), array([2, 4, 6])],
[array([ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]), array([3, 6, 9])]], dtype=object)
关于python - 从不同的数组和数组/numpy 模块生成数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582809/