Python 广播?对于循环-->;努比
我所拥有的:Python 广播?对于循环-->;努比,python,numpy,Python,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
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')]
但我不确定那是什么
谁能给我一些建议吗?提前谢谢
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]])
你可以用
列表理解
如果希望在不使用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\u 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')]
[array(['O','O','O','O','T','T','T'],dtype='谢谢你的回答,但我的意思是应用一个函数(np.repeat)从1D数组到2D数组的每一行…不使用loop@KevinChoi我认为您的问题不够清楚,因为您明确要求使用for循环。我添加了另一个没有for循环的解决方案。请检查。希望这有帮助。我建议修改问题标题。我认为不可能使用广播If输出的大小是可变的。所以我想列表理解是最好的解决方案。np.repeat
确实提到了广播
,但它的应用比像加法这样的运算符广播要复杂一些。广播
让我们从(m,1)和(n,)中创建一个(m,n)形状数组形状数组。你想要的输出不是这样的。它是一个数组列表,数组大小变化很大。
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)))
[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')]