为何我的APL表达式返回1、2矩阵而非预期的0、1矩阵?
APL随机矩阵结果不符预期的原因
问题还原
你的APL表达式:
?(1 2 × 4) ⍴2
实际输出的随机矩阵元素都是1和2:
1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 2 2
但你预期得到的是包含0和1的矩阵:
1 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1
核心原因
你误解了APL中?(随机数生成器)的行为:
?N生成的是1到N之间的随机整数,所以?2的结果只能是1或2,不可能出现0。- 你的表达式
?(1 2 × 4) ⍴2等价于?4 8⍴2,本质是生成一个4行8列的矩阵,每个元素都是?2的结果(即1或2),这和实际输出完全一致。
修正方案
如果要生成包含0和1的随机矩阵,有两种常用写法:
- 利用
?N-1生成0到N-1的随机数:
(1 2 × 4) ⍴ ?2 - 1
- 生成0到1的随机浮点数后向下取整:
⌊ ? (1 2 × 4) ⍴ 1
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

