python - 创建一个任意形状的 Numpy 数组,(最好没有 for 循环)
问题描述
我正在尝试使用 numpy 映射我的神经网络的拓扑。
我正在寻找一种方法来创建一个不规则形状的数组,最好不使用 for 循环。
下面的代码创建了一个 numpy 对象数组。数组是不规则的形状,会根据传入的“Iarray”变量而改变。
我的神经网络的拓扑是 [2,3,2] 所以这个函数输出一个包含三列的数组,第一列有 2 个元素,第二列有 3 个元素,第三列有 2 个元素。
def object_array(Iarray):
Array = np.empty([1,len(Iarray)],"object")
Cell_Chain = np.empty()
for i in range(len(Iarray)):
row = np.array([LSTM.Cell(i,ii) for ii in range(Iarray[i])])
Array[0,i] = row
return Array
这看起来很笨拙,我非常想找到一种更好的方法来编写这段代码。
如果有人有想法,我会很高兴听到他们的声音。
解决方案
创建对象 dtype 数组很容易:
In [550]: arr = np.empty(5, object)
In [551]: arr
Out[551]: array([None, None, None, None, None], dtype=object)
您可以从对象列表中填充它:
In [552]: arr[:] = [np.arange(i) for i in range(5)]
In [553]: arr
Out[553]:
array([array([], dtype=int64), array([0]), array([0, 1]),
array([0, 1, 2]), array([0, 1, 2, 3])], dtype=object)
事实上,您可以直接从列表中创建数组:
In [554]: np.array([np.arange(i) for i in range(5)])
Out[554]:
array([array([], dtype=int64), array([0]), array([0, 1]),
array([0, 1, 2]), array([0, 1, 2, 3])], dtype=object)
In [555]: np.array([np.arange(3) for i in range(5)])
Out[555]:
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
分配给预定义数组更可靠:
In [561]: arr[:]=[np.arange(3) for i in range(5)]
In [562]: arr
Out[562]:
array([array([0, 1, 2]), array([0, 1, 2]), array([0, 1, 2]),
array([0, 1, 2]), array([0, 1, 2])], dtype=object)
有时,您可能会在此类作业中出现广播错误。
但无论如何,您仍然必须创建要分配给数组的对象,并且在这样做时很难避免循环 - 至少在大多数情况下不会。
推荐阅读
- c++ - C++ SFML 操纵杆输入
- javascript - 制作高阶组件观察者 - Mobx React
- c# - 在文本编写器上显示字典的键值对值
- javascript - 通过 fetch() 向后端 API 发送 POST 请求时,body 只有 key,没有 value
- javascript - WebdriverIO:无法使用 .getAlertText() 方法“未解析的函数或方法 getAlertText()”
- java - 为什么recyclerview 在android pie 上不起作用?
- getstream-io - 如何在 GetStream 中处理多个提要权限
- jquery - 清除数据表上的所有过滤器/排序/分页
- apache-spark - PySpark 计数在 RDD 中按组区分
- laravel - 未定义属性:Illuminate\Routing\Router::$app