python - 广播?For 循环 --> numpy
问题描述
我有的:
rnd_ar = np.random.randint(5, size = (10,2))
rnd_ar
array([[4, 2],
[2, 1],
[2, 0],
[3, 4],
[0, 1],
[0, 2],
[1, 0],
[0, 0],
[3, 0],
[1, 0]])
我想要做的是仅使用 numpy 或 pandas 来简化以下代码:
test = []
for i in rnd_ar:
test.append(np.repeat(['O', 'T'],i))
test
[array(['O', 'O', 'O', 'O', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'T'], dtype='<U1'),
array(['O', 'O'], dtype='<U1'),
array(['O', 'O', 'O', 'T', 'T', 'T', 'T'], dtype='<U1'),
array(['T'], dtype='<U1'),
array(['T', 'T'], dtype='<U1'),
array(['O'], dtype='<U1'),
array([], dtype='<U1'),
array(['O', 'O', 'O'], dtype='<U1'),
array(['O'], dtype='<U1')]
我认为答案只是扩展以下行:
np.repeat(np.array(['O', 'T']), rnd_ar[0])
但我不确定那是什么。
谁能给我一些建议?提前致谢!
解决方案
import numpy as np
rnd_ar = np.random.randint(5, size = (10,2))
rnd_ar
array([[4, 3],
[4, 1],
[1, 0],
[2, 4],
[4, 2],
[3, 4],
[3, 2],
[2, 1],
[4, 3],
[2, 1]])
您可以使用
列表理解
test = [np.repeat(['O', 'T'],i) for i in rnd_ar]
如果您希望在没有for
循环的情况下执行此操作,则可以一起使用多个 numpy 函数。我会这样做:
np.split(
np.repeat(np.array(['O', 'T'] * rnd_ar.shape[0]).reshape(rnd_ar.shape),
rnd_ar.flatten()),
np.cumsum(np.sum(rnd_ar, axis=1)))
上面的输出rnd_ar
将是:
[array(['O', 'O', 'O', 'O', 'T', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'O', 'O', 'T'], dtype='<U1'),
array(['O'], dtype='<U1'),
array(['O', 'O', 'T', 'T', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'O', 'O', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'O', 'T', 'T', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'O', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'T'], dtype='<U1'),
array(['O', 'O', 'O', 'O', 'T', 'T', 'T'], dtype='<U1'),
array(['O', 'O', 'T'], dtype='<U1'),
array([], dtype='<U1')]
推荐阅读
- kotlin - 在 LiveData 或 MutableLiveData 中包装 MutableList
- javascript - 如何编辑/更新数组中的对象并保留所有其他嵌套数据?
- vb.net - 无法回调变量
- css-selectors - 在 Slick Carousel 中定位活动元素
- java - Tomcat 在关闭时是否会过早破坏 ServletContext?
- python-3.x - 类型提示实现两个接口的对象
- docker - phpMyAdmin - Docker容器上的错误“调用成员函数getPath on null”
- r - “独特”的错误?当 'nmax' 比唯一值的数量少 1 时,不会出现错误
- javascript - 将嵌套数组减少为格式化字符串
- java - 嵌套事务(而不是并发事务)的默认隔离级别是多少?